#include <bits/stdc++.h>
using namespace std;
const int maxn = 412345;
int FWT[maxn];
int ar[maxn];
int vis[maxn];
int depth[maxn];
int in[maxn], out[maxn];
int cnt = 1;
int n, m, foo, bar, id, x, val;
vector<int> v[maxn];
void dfs(int n) {
  in[n] = cnt++;
  vis[n] = true;
  for (int i = 0; i < v[n].size(); i++) {
    int pt = v[n][i];
    if (!vis[pt]) {
      depth[pt] = depth[n] + 1;
      dfs(pt);
    }
  }
  out[n] = cnt++;
}
void update(int pos, int val) {
  while (pos < maxn) {
    FWT[pos] += val;
    pos += pos & (-pos);
  }
}
int query(int pos) {
  int r = 0;
  while (pos >= 1) {
    r += FWT[pos];
    pos -= pos & (-pos);
  }
  return r;
}
int main() {
  scanf("%d%d", &n, &m);
  for (int i = 0; i < n; i++) scanf("%d", &ar[i + 1]);
  for (int i = 0; i < n - 1; i++) {
    scanf("%d%d", &foo, &bar);
    v[foo].push_back(bar);
    v[bar].push_back(foo);
  }
  dfs(1);
  for (int i = 0; i < m; i++) {
    scanf("%d%d", &id, &x);
    if (id == 1) {
      scanf("%d", &val);
      if (depth[x] & 1) {
        update(in[x], -val);
        update(out[x], val);
      } else {
        update(in[x], val);
        update(out[x], -val);
      }
    } else {
      if (depth[x] & 1)
        printf("%d\n", ar[x] - query(in[x]));
      else
        printf("%d\n", ar[x] + query(in[x]));
    }
  }
  return 0;
}
