#include <bits/stdc++.h>
using namespace std;
int times, used[200010], t[200010], first[200010], last[200010], d[200010], n,
    a[200010];
vector<vector<int> > g(200010);
void dfs(int v, int pr) {
  used[v] = 1;
  first[v] = ++times;
  d[v] = d[pr] + 1;
  for (int i = 0; i < g[v].size(); i++) {
    if (!used[g[v][i]]) dfs(g[v][i], v);
  }
  last[v] = times;
}
int f(int i) { return (i & (-i)); }
void in(int i, int val) {
  while (i <= n) {
    t[i] += val;
    i = i + f(i);
  }
}
int gget(int i) {
  int res = 0;
  while (i > 0) {
    res += t[i];
    i = i - f(i);
  }
  return res;
}
int main() {
  int m, i, x, y, val, q;
  cin >> n >> m;
  for (i = 1; i <= n; i++) {
    cin >> a[i];
  }
  for (i = 0; i < n - 1; i++) {
    cin >> x >> y;
    g[x].push_back(y);
    g[y].push_back(x);
  }
  dfs(1, 0);
  for (i = 0; i < m; i++) {
    scanf("%d", &q);
    scanf("%d", &x);
    if (q == 1) {
      scanf("%d", &val);
      in(first[x], val * (d[x] % 2 == 0 ? 1 : -1));
      in(last[x] + 1, val * (d[x] % 2 == 0 ? -1 : 1));
    } else {
      int ans = gget(first[x]) * (d[x] % 2 == 0 ? 1 : -1) + a[x];
      printf("%d\n", ans);
    }
  }
  return 0;
}
