#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:100000000000000")
using namespace std;
const long long int INF = 2e15;
void build(int id, int l, int r, pair<int, int> *tree, int *a) {
  if (l == r) {
    tree[id] = make_pair(a[l], 0);
    return;
  }
  int m = (l + r) / 2;
  build(id * 2, l, m, tree, a);
  build(id * 2 + 1, m + 1, r, tree, a);
}
void push(int id, pair<int, int> *tree) {
  tree[id].first += tree[id].second;
  if (id * 2 < 300000 * 4) tree[id * 2].second += tree[id].second;
  if (id * 2 + 1 < 300000 * 4) tree[id * 2 + 1].second += tree[id].second;
  tree[id].second = 0;
}
int get_val(int id, pair<int, int> *tree) {
  if (id >= 300000 * 4) return 0;
  return tree[id].first;
}
void inc(int id, int l, int r, int zl, int zr, pair<int, int> *tree, int val) {
  push(id, tree);
  if (zl > zr) return;
  if (l == zl && r == zr) {
    tree[id].second += val;
    push(id, tree);
    return;
  }
  int m = (l + r) / 2;
  inc(id * 2, l, m, zl, min(m, zr), tree, val);
  inc(id * 2 + 1, m + 1, r, max(m + 1, zl), zr, tree, val);
}
int geti(int id, int l, int r, int wh, pair<int, int> *tree) {
  push(id, tree);
  if (l == r) {
    return tree[id].first;
  }
  int m = (l + r) / 2;
  if (wh <= m) return geti(id * 2, l, m, wh, tree);
  return geti(id * 2 + 1, m + 1, r, wh, tree);
}
pair<int, int> q[2][300000 * 4];
int tin[300000], tout[300000], gtim = 1, is[300000], a[300000], ins[300000];
vector<int> g[300000];
void dfs(int id, int fr, int ch) {
  tin[id] = ++gtim;
  is[id] = ch;
  for (int i = 0; i < ((int)(g[id]).size()); i++) {
    int to = g[id][i];
    if (to == fr) continue;
    dfs(to, id, 1 - ch);
  }
  tout[id] = gtim;
}
int main() {
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < (n); i++) {
    scanf("%d", &a[i]);
  }
  for (int i = 0; i < (n - 1); i++) {
    int a0, b;
    scanf("%d%d", &a0, &b);
    a0--;
    b--;
    g[a0].push_back(b);
    g[b].push_back(a0);
  }
  dfs(0, -1, 0);
  for (int i = 0; i < (n); i++) {
    ins[tin[i]] = a[i];
  }
  for (int j = 0; j < (2); j++) build(1, 0, gtim, q[j], ins);
  for (int i = 0; i < (m); i++) {
    int t, x, val;
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d%d", &x, &val);
      x--;
      inc(1, 0, gtim, tin[x], tout[x], q[is[x]], val);
      inc(1, 0, gtim, tin[x], tout[x], q[1 - is[x]], -val);
    } else {
      scanf("%d", &x);
      x--;
      printf("%d\n", geti(1, 0, gtim, tin[x], q[is[x]]));
    }
  }
}
