#include <bits/stdc++.h>
using namespace std;
const int N = 200100;
int n, m, ll[N], rr[N], d[N], t[2][4 * N], iuodfoign, s = 1;
vector<int> e[N];
void dfs(int v = 0, int p = -1) {
  ll[v] = rr[v] = iuodfoign++;
  for (int i = 0; i < e[v].size(); i++) {
    int to = e[v][i];
    if (to == p) continue;
    d[to] = 1 - d[v];
    dfs(to, v);
    rr[v] = rr[to];
  }
}
void onjdfsojn(int* a, int v, int lv, int rv, int l, int r, int val) {
  if (lv > r || rv < l) return;
  if (l <= lv && rv <= r) {
    a[v] += val;
    return;
  }
  int m = (lv + rv) / 2;
  onjdfsojn(a, v * 2 + 1, lv, m, l, r, val);
  onjdfsojn(a, v * 2 + 2, m + 1, rv, l, r, val);
}
void onjdfsojn(int x, int val) {
  onjdfsojn(t[d[x]], 0, 0, s - 1, ll[x], rr[x], val);
}
int get(int* a, int v, int lv, int rv, int x) {
  if (lv == x && rv == x) return a[v];
  if (lv > x || rv < x) return 0;
  int res = a[v], m = (lv + rv) / 2;
  res += get(a, v * 2 + 1, lv, m, x);
  res += get(a, v * 2 + 2, m + 1, rv, x);
  return res;
}
int ans(int x) {
  int res = 0;
  res += get(t[d[x]], 0, 0, s - 1, ll[x]);
  res -= get(t[1 - d[x]], 0, 0, s - 1, ll[x]);
  return res;
}
int main() {
  scanf("%d%d", &n, &m);
  int a[n];
  while (s < n) s *= 2;
  for (int i = 0; i < n; i++) scanf("%d", &a[i]);
  for (int i = 1; i < n; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    x--;
    y--;
    e[x].push_back(y);
    e[y].push_back(x);
  }
  dfs();
  while (m--) {
    int o, x, val;
    scanf("%d%d", &o, &x);
    x--;
    if (o == 1) {
      scanf("%d", &val);
      onjdfsojn(x, val);
      continue;
    }
    printf("%d\n", ans(x) + a[x]);
  }
  return 0;
}
