Iahub likes trees very much. Recently he discovered an interesting tree named propagating tree. The tree consists of *n* nodes numbered from 1 to *n*, each node *i* having an initial value *a*<sub class="lower-index">*i*</sub>. The root of the tree is node 1.

This tree has a special property: when a value *val* is added to a value of node *i*, the value -*val* is added to values of all the children of node *i*. Note that when you add value -*val* to a child of node *i*, you also add -(-*val*) to all children of the child of node *i* and so on. Look an example explanation to understand better how it works.

This tree supports two types of queries:
 -  "1 *x* *val*" — *val* is added to the value of node *x*; -  "2 *x*" — print the current value of node *x*. 
In order to help Iahub understand the tree better, you must answer *m* queries of the preceding type.
The first line contains two integers *n* and *m* (1 ≤ *n*, *m* ≤ 200000). The second line contains *n* integers *a*<sub class="lower-index">1</sub>, *a*<sub class="lower-index">2</sub>, ..., *a*<sub class="lower-index">*n*</sub> (1 ≤ *a*<sub class="lower-index">*i*</sub> ≤ 1000). Each of the next *n*–1 lines contains two integers *v*<sub class="lower-index">*i*</sub> and *u*<sub class="lower-index">*i*</sub> (1 ≤ *v*<sub class="lower-index">*i*</sub>, *u*<sub class="lower-index">*i*</sub> ≤ *n*), meaning that there is an edge between nodes *v*<sub class="lower-index">*i*</sub> and *u*<sub class="lower-index">*i*</sub>.

Each of the next *m* lines contains a query in the format described above. It is guaranteed that the following constraints hold for all queries: 1 ≤ *x* ≤ *n*, 1 ≤ *val* ≤ 1000.
def EulerTour(g, root):
    n = len(g)
    root = root
    g = g

    tank = [root]
    eulerTour = []
    left = [0]*n
    right = [-1]*n
    depth = [-1]*n
    parent = [-1]*n
    child = [[] for i in range(n)]

    eulerNum = -1
    de = -1

    while tank:
        #print(tank)
        v = tank.pop()
        if v >= 0:
            eulerNum += 1
            eulerTour.append(v)
            left[v] = eulerNum
            right[v] = eulerNum
            tank.append(~v)
            de += 1
            depth[v] = de
            for u in g[v]:
                if parent[v] == u:
                    continue
                tank.append(u)
                parent[u] = v
                child[v].append(u)
        else:
            de -= 1
            if ~v != root:
                eulerTour.append(parent[~v])
                eulerNum += 1
                right[parent[~v]] = eulerNum
    return eulerTour, left, right, depth

class BIT:
    def __init__(self, n):
        self.n = n
        self.bit = [0]*(self.n+1) # 1-indexed

    def init(self, init_val):
        for i, v in enumerate(init_val):
            self.add(i, v)

    def add(self, i, x):
        # i: 0-indexed
        i += 1 # to 1-indexed
        while i <= self.n:
            self.bit[i] += x
            i += (i & -i)

    def sum(self, i, j):
        # return sum of [i, j)
        # i, j: 0-indexed
        return self._sum(j) - self._sum(i)

    def _sum(self, i):
        # return sum of [0, i)
        # i: 0-indexed
        res = 0
        while i > 0:
            res += self.bit[i]
            i -= i & (-i)
        return res

class RangeAddBIT:
    def __init__(self, n):
        self.n = n
        self.bit1 = BIT(n)
        self.bit2 = BIT(n)

    def init(self, init_val):
        self.bit2.init(init_val)

    def add(self, l, r, x):
        # add x to [l, r)
        # l, r: 0-indexed
        self.bit1.add(l, x)
        self.bit1.add(r, -x)
        self.bit2.add(l, -x*l)
        self.bit2.add(r, x*r)

    def sum(self, l, r):
        # return sum of [l, r)
        # l, r: 0-indexed
        return self._sum(r) - self._sum(l)

    def _sum(self, i):
        # return sum of [0, i)
        # i: 0-indexed
        return self.bit1._sum(i)*i + self.bit2._sum(i)

    def __str__(self): # for debug
        arr = [self.sum(i,i+1) for i in range(self.n)]
        return str(arr)

import sys
import io, os
input = io.BytesIO(os.read(0,os.fstat(0).st_size)).readline

n, m = map(int, input().split())
A = list(map(int, input().split()))
edge = [[] for i in range(n)]
for i in range(n-1):
    u, v = map(int, input().split())
    u, v = u-1, v-1
    edge[u].append(v)
    edge[v].append(u)

et, left, right, depth = EulerTour(edge, 0)
N = len(et)
bitEven = RangeAddBIT(N+1)
bitOdd = RangeAddBIT(N+1)
for i in range(m):
    temp = list(map(int, input().split()))
    if temp[0] == 1:
        x, val = temp[1:]
        x -= 1
        l, r = left[x], right[x]
        if depth[x]%2 == 0:
            bitEven.add(l, r, val)
            bitOdd.add(l, r, -val)
        else:
            bitEven.add(l, r, -val)
            bitOdd.add(l, r, val)
    else:
        x = temp[1]
        x -= 1
        l = left[x]
        if depth[x]%2 == 0:
            ans = bitEven.sum(l, l+1)+A[x]
        else:
            ans = bitOdd.sum(l, l+1)+A[x]
        print(ans)
