#include <bits/stdc++.h>
using namespace std;
const int N = 200005;
int n, m, num = 1, BIT[2][2 * N];
struct Node {
  int l, r, v, d;
} node[N];
vector<int> g[N];
void add(int x, int v, int *BIT) {
  for (; x <= 2 * n; x += (x & -x)) BIT[x] += v;
}
int get(int x, int *BIT) {
  int ans = 0;
  for (; x; x -= (x & -x)) ans += BIT[x];
  return ans;
}
void DFS(int u, int fa, int d) {
  node[u].l = num++;
  node[u].d = d;
  for (int i = 0; i < g[u].size(); i++) {
    int v = g[u][i];
    if (v == fa) continue;
    DFS(v, u, 1 - d);
  }
  node[u].r = num++;
}
int main() {
  scanf("%d %d", &n, &m);
  int u, v;
  for (int i = 1; i <= n; i++) scanf("%d", &node[i].v);
  for (int j = 0; j < n - 1; j++) {
    scanf("%d %d", &u, &v);
    g[u].push_back(v);
    g[v].push_back(u);
  }
  DFS(1, -1, 0);
  int op, a, b;
  while (m--) {
    scanf("%d", &op);
    if (op == 1) {
      scanf("%d %d", &a, &b);
      add(node[a].l, b, BIT[node[a].d]);
      add(node[a].r + 1, -b, BIT[node[a].d]);
    } else {
      scanf("%d", &a);
      printf("%d\n", node[a].v + get(node[a].l, BIT[node[a].d]) -
                         get(node[a].l, BIT[1 - node[a].d]));
    }
  }
  return 0;
}
