#include <bits/stdc++.h>
using namespace std;
const int inf = (1 << 30);
const long long INF = (1LL << 60);
int a[200009], id[200009], dep[200009];
vector<int> edge[200009];
struct node {};
int add[200009 * 4];
void update_Add(int L, int R, int k, int ad) {
  if (L == R) {
    if (dep[L] & 1)
      add[k] += ad;
    else
      add[k] -= ad;
  } else
    add[k] += ad;
}
void push_down(int L, int R, int k) {
  if (add[k]) {
    int mind = (L + R) >> 1;
    update_Add(L, mind, k << 1, add[k]);
    update_Add(mind + 1, R, k << 1 | 1, add[k]);
    add[k] = 0;
  }
}
void update(int L, int R, int l, int r, int k, int ad) {
  if (L == l && r == R) {
    update_Add(L, R, k, ad);
    return;
  }
  push_down(L, R, k);
  int mind = (L + R) >> 1;
  if (mind >= r)
    update(L, mind, l, r, k << 1, ad);
  else if (mind + 1 <= l)
    update(mind + 1, R, l, r, k << 1 | 1, ad);
  else {
    update(L, mind, l, mind, k << 1, ad);
    update(mind + 1, R, mind + 1, r, k << 1 | 1, ad);
  }
}
int query(int L, int R, int l, int k) {
  if (L == R) return add[k];
  push_down(L, R, k);
  int mind = (L + R) >> 1;
  if (mind >= l)
    return query(L, mind, l, k << 1);
  else
    return query(mind + 1, R, l, k << 1 | 1);
}
int findId[200009][2], cnt;
void dfs(int r, int fa, int de) {
  findId[r][0] = id[r] = ++cnt;
  dep[id[r]] = de;
  for (int i = 0; i < edge[r].size(); ++i)
    if (edge[r][i] != fa) dfs(edge[r][i], r, de + 1);
  findId[r][1] = cnt;
}
int main() {
  int n, m;
  cnt = 0;
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) {
    scanf("%d", &a[i]);
  }
  int x, y;
  for (int i = 1; i < n; ++i) {
    scanf("%d%d", &x, &y);
    edge[x].push_back(y);
    edge[y].push_back(x);
  }
  dfs(1, 0, 1);
  for (int i = 1; i <= n; ++i) {
    if (dep[id[i]] & 1)
      update(1, n, id[i], id[i], 1, a[i]);
    else
      update(1, n, id[i], id[i], 1, -a[i]);
  }
  for (int i = 0; i < m; ++i) {
    int lag;
    scanf("%d", &lag);
    if (lag == 1) {
      scanf("%d%d", &x, &y);
      if (dep[id[x]] & 1)
        update(1, n, findId[x][0], findId[x][1], 1, y);
      else
        update(1, n, findId[x][0], findId[x][1], 1, -y);
    } else {
      scanf("%d", &x);
      printf("%d\n", query(1, n, id[x], 1));
    }
  }
}
