#include <bits/stdc++.h>
using namespace std;
const int N = 222222;
inline int lowbit(int x) { return x & -x; }
struct BIT {
  long long a[N];
  void init() { memset(a, 0, sizeof(a)); }
  void add(int x, int d) {
    for (x += 2; x > 0; x -= lowbit(x)) a[x] += d;
  }
  void add(int l, int r, int d) {
    if (l > r) return;
    add(l - 1, -d);
    add(r, d);
  }
  long long sum(int x) {
    long long s = 0;
    for (x += 2; x < N; x += lowbit(x)) s += a[x];
    return s;
  }
} bit;
struct Edge {
  int u, v, nx;
  Edge() {}
  Edge(int u, int v, int nx) : u(u), v(v), nx(nx) {}
} edge[N << 1];
int eh[N], ec;
void init() {
  memset(eh, -1, sizeof(eh));
  ec = 0;
}
void addedge(int u, int v) {
  edge[ec] = Edge(u, v, eh[u]);
  eh[u] = ec++;
  edge[ec] = Edge(v, u, eh[v]);
  eh[v] = ec++;
}
long long val[N];
int st[N], ed[N], clk, dp[N];
void dfs(int u, int d) {
  dp[u] = d;
  if (d & 1)
    bit.add(clk, clk, val[u]);
  else
    bit.add(clk, clk, -val[u]);
  st[u] = clk++;
  for (int i = eh[u]; ~i; i = edge[i].nx) {
    Edge &e = edge[i];
    if (st[e.v]) continue;
    dfs(e.v, d + 1);
  }
  ed[u] = clk - 1;
}
int main() {
  int n, m;
  ios::sync_with_stdio(0);
  while (cin >> n >> m) {
    for (int i = 1; i <= n; i++) cin >> val[i];
    init();
    int u, v;
    for (int i = 1; i < n; i++) {
      cin >> u >> v;
      addedge(u, v);
    }
    clk = 1;
    memset(st, 0, sizeof(st));
    bit.init();
    dfs(1, 1);
    int op;
    while (m--) {
      cin >> op;
      if (op == 1) {
        cin >> u >> v;
        if (dp[u] & 1) {
          bit.add(st[u], st[u], v);
          bit.add(st[u] + 1, ed[u], v);
        } else {
          bit.add(st[u], st[u], -v);
          bit.add(st[u] + 1, ed[u], -v);
        }
      } else {
        cin >> u;
        if (dp[u] & 1)
          cout << bit.sum(st[u]) << endl;
        else
          cout << -bit.sum(st[u]) << endl;
      }
    }
  }
  return 0;
}
