#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:64000000")
using namespace std;
const int maxn = 200333;
int a[maxn * 2], privet2[maxn * 2], last[maxn], val[maxn], d[maxn],
    f[2][maxn + 10], r[maxn], l[maxn];
int n, m, i, j, x, k, y, v, res;
void dfs(int v, int p) {
  int j = last[v];
  k++;
  l[v] = k;
  r[v] = k;
  while (j > 0) {
    if (a[j] == p) {
      j = privet2[j];
      continue;
    }
    d[a[j]] = d[v] ^ 1;
    dfs(a[j], v);
    r[v] = k;
    j = privet2[j];
  }
}
void add(int x, int y) {
  k++;
  privet2[k] = last[x];
  last[x] = k;
  a[k] = y;
}
void add1(int y, int x, int d) {
  while (x <= maxn) {
    f[y][x] += d;
    x = x | (x + 1);
  }
}
int get(int y, int x) {
  res = 0;
  while (x > 0) {
    res += f[y][x];
    x = (x & (x + 1)) - 1;
  }
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  for (i = 1; i <= n; i++) {
    scanf("%d", &val[i]);
  }
  for (i = 1; i < n; i++) {
    scanf("%d%d", &x, &y);
    add(x, y);
    add(y, x);
  }
  k = 0;
  dfs(1, 0);
  int t, ans;
  for (i = 1; i <= m; i++) {
    scanf("%d", &t);
    if (t == 1) {
      scanf("%d%d", &x, &y);
      add1(d[x], l[x], y);
      add1(d[x], r[x] + 1, -y);
      continue;
    }
    scanf("%d", &x);
    ans = get(d[x], l[x]) - get(d[x] ^ 1, l[x]) + val[x];
    printf("%d\n", ans);
  }
}
