#include <bits/stdc++.h>
using namespace std;
const int Max = 1e9 + 100;
const long long int MAX = 1e18 + 500;
const int sz = 400010;
vector<int> ad[sz];
int start[sz], fin[sz];
int lev[sz];
int tim = 1;
int tree[2][sz];
void DFS(int p, int par, int deep) {
  start[p] = tim++;
  lev[p] = deep % 2;
  for (auto xx : ad[p]) {
    if (par != xx) {
      DFS(xx, p, deep + 1);
    }
  }
  fin[p] = tim++;
}
void ADD(int id, int val, int mark) {
  while (id <= tim) {
    tree[mark][id] += val;
    id += (id & -id);
  }
}
int range(int id, int mark) {
  int sum = 0;
  while (id > 0) {
    sum += tree[mark][id];
    id -= (id & -id);
  }
  return sum;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int a, b, c, i, j, k, q, p, x, y, ct, ct1, m, l, r, x1, y1, mn, h, sum1, in,
      z, mid, n, mx;
  char ch;
  double d;
  string str1, str2, str;
  bool bl, bl1;
  int t, cs = 1;
  cin >> n >> m;
  int ara[n + 1];
  for (int i = 1; i <= n; i++) cin >> ara[i];
  for (int i = 1; i <= n - 1; i++) {
    cin >> p >> q;
    ad[p].push_back(q);
    ad[q].push_back(p);
  }
  DFS(1, -1, 0);
  while (m--) {
    int le;
    cin >> le;
    if (le == 1) {
      int val;
      cin >> x >> val;
      ADD(start[x], val, lev[x]), ADD(fin[x], -val, lev[x]);
      ADD(start[x], -val, (1 ^ lev[x])), ADD(fin[x], val, (1 ^ lev[x]));
    } else {
      cin >> x;
      int ans = range(start[x], lev[x]) + ara[x];
      cout << ans << '\n';
    }
  }
}
