#include <bits/stdc++.h>
using namespace std;
int tz = -1;
const int N = 200005;
int beg[N], en[N];
int depth[N], a[N];
int st[4 * N];
vector<int> adj[N];
void dfs(int s, int p) {
  beg[s] = ++tz;
  vector<int>::iterator itv;
  for (itv = adj[s].begin(); itv != adj[s].end(); itv++) {
    if (*itv != p) {
      depth[*itv] = depth[s] + 1;
      dfs(*itv, s);
    }
  }
  en[s] = tz;
}
void update(int ss, int se, int ind, int val, int i) {
  if (ss > se || ind < ss || ind > se) return;
  if (ss == se && ss == ind) {
    st[i] += val;
    return;
  }
  int mid = (ss + se) / 2;
  update(ss, mid, ind, val, 2 * i + 1);
  update(mid + 1, se, ind, val, 2 * i + 2);
  st[i] = st[2 * i + 1] + st[2 * i + 2];
}
int query(int ss, int se, int l, int r, int i) {
  if (ss > se || se < l || r < ss) return 0;
  if (l <= ss && se <= r) return st[i];
  int mid = (ss + se) / 2;
  return query(ss, mid, l, r, 2 * i + 1) + query(mid + 1, se, l, r, 2 * i + 2);
}
int main() {
  int n, m, i;
  scanf("%d%d", &n, &m);
  for (i = 0; i < n; i++) scanf("%d", &a[i]);
  for (i = 0; i < n - 1; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    adj[x - 1].push_back(y - 1);
    adj[y - 1].push_back(x - 1);
  }
  dfs(0, -1);
  while (m--) {
    int ty, x, val;
    scanf("%d", &ty);
    if (ty == 1) {
      scanf("%d%d", &x, &val);
      if (depth[x - 1] & 1) val = -val;
      update(0, n - 1, beg[x - 1], val, 0);
      update(0, n - 1, en[x - 1] + 1, -val, 0);
    } else {
      scanf("%d", &x);
      int ans = a[x - 1];
      if (depth[x - 1] & 1)
        ans -= query(0, n - 1, 0, beg[x - 1], 0);
      else
        ans += query(0, n - 1, 0, beg[x - 1], 0);
      printf("%d\n", ans);
    }
  }
}
