#include <bits/stdc++.h>
const int maxn = 200000 + 10;
int n, m;
struct Tedge {
  int y;
  Tedge *next;
  Tedge(int y = 0, Tedge *next = NULL) : y(y), next(next){};
} * h[maxn];
int r[maxn], l[maxn];
int tree[maxn * 4];
int add[maxn * 4];
int a[maxn];
int cnt;
int sign[maxn];
bool mark[maxn];
int x, y;
void dfs(int root, int s) {
  if (mark[root]) return;
  mark[root] = 1;
  l[root] = ++cnt;
  sign[cnt] = s;
  Tedge *tmp = h[root];
  while (tmp != NULL) {
    dfs(tmp->y, -s);
    tmp = tmp->next;
  }
  r[root] = cnt;
}
void ins(int x, int y) { h[x] = new Tedge(y, h[x]); }
void down(int root, int left, int right, int mid) {
  if (left == mid) tree[left] += add[root] * sign[left];
  if (mid + 1 == right) tree[right] += add[root] * sign[right];
  add[root * 2] += add[root];
  add[root * 2 + 1] += add[root];
  add[root] = 0;
}
void update(int root, int left, int right, int a, int b, int v) {
  if (left > b || right < a) return;
  if (left >= a && right <= b) {
    if (left == right) tree[left] += v * sign[left];
    add[root] += v;
    return;
  }
  int mid = (left + right) >> 1;
  down(root, left, right, mid);
  update(root * 2, left, mid, a, b, v);
  update(root * 2 + 1, mid + 1, right, a, b, v);
}
int query(int root, int left, int right, int s) {
  if (left > s || right < s) return 0;
  if (left == right) return tree[left];
  int mid = (left + right) >> 1;
  down(root, left, right, mid);
  return query(root * 2, left, mid, s) + query(root * 2 + 1, mid + 1, right, s);
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i <= n; i++) h[i] = NULL;
  for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
  for (int i = 1; i < n; i++) {
    scanf("%d%d", &x, &y);
    ins(x, y);
    ins(y, x);
  }
  cnt = 0;
  memset(mark, 0, sizeof(mark));
  dfs(1, 1);
  for (int i = 1; i <= n; i++) tree[l[i]] = a[i];
  int type, t, v;
  for (int i = 0; i < m; i++) {
    scanf("%d", &type);
    if (type == 1) {
      scanf("%d%d", &t, &v);
      update(1, 1, n, l[t], r[t], v * sign[l[t]]);
    } else {
      scanf("%d", &t);
      printf("%d\n", query(1, 1, n, l[t]));
    }
  }
  return 0;
}
