#include <bits/stdc++.h>
using namespace std;
const int N = 1e6 + 5;
int bit[N][2];
int beg[N], endd[N], arri[N], lvl[N];
vector<int> v[N];
int tim = 0;
void dfs(int i, int par, int l) {
  arri[tim++] = i;
  lvl[i] = l % 2;
  beg[i] = tim;
  for (auto j : v[i]) {
    if (j != par) {
      dfs(j, i, l + 1);
    }
  }
  endd[i] = tim;
}
void update(int pos, int l, int val) {
  for (pos; pos < N; pos += pos & -pos) bit[pos][l] += val;
}
int pre(int pos, int l) {
  int ret = 0;
  for (pos; pos > 0; pos -= pos & -pos) ret += bit[pos][l];
  return ret;
}
int main() {
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  int val[n + 1];
  for (int i = 1; i <= n; i++) {
    cin >> val[i];
  }
  for (int i = 0; i < n - 1; i++) {
    int x, y;
    cin >> x >> y;
    v[x].push_back(y);
    v[y].push_back(x);
  }
  dfs(1, -1, 1);
  while (m--) {
    int x;
    cin >> x;
    if (x == 1) {
      int pos, value;
      cin >> pos >> value;
      int l = lvl[pos];
      update(beg[pos], l, value);
      update(endd[pos] + 1, l, -1 * value);
      update(beg[pos], l ^ 1, -1 * value);
      update(endd[pos] + 1, l ^ 1, value);
    } else {
      int pos;
      cin >> pos;
      cout << val[pos] + pre(beg[pos], lvl[pos]) << '\n';
    }
  }
}
