#include <bits/stdc++.h>
using namespace std;
const int lt = 200005;
int strength[lt];
vector<int> adj[lt];
bool visited[lt];
vector<int> arr;
vector<int> st(lt);
vector<int> en(lt);
vector<int> level(lt);
vector<int> segodd(4 * lt);
vector<int> segeven(4 * lt);
int tp = 0;
int sum = 0;
void dfs(int u, int l) {
  arr.push_back(u);
  st[u] = tp;
  level[u] = l;
  tp++;
  visited[u] = 1;
  for (int i = 0; i < adj[u].size(); i++) {
    int v = adj[u][i];
    if (!visited[v]) dfs(v, l + 1);
  }
  en[u] = (tp - 1);
}
void add(int s, int e, int l, int r, int val, int isOdd, int i) {
  if (e < l || s > r) return;
  if (l <= s && e <= r) {
    if (isOdd)
      segodd[i] += val;
    else
      segeven[i] += val;
    return;
  } else {
    int m = (s + e) / 2;
    add(s, m, l, r, val, isOdd, 2 * i + 1);
    add(m + 1, e, l, r, val, isOdd, 2 * i + 2);
  }
}
void query(int s, int e, int x, int isOdd, int i) {
  if (x < s || x > e) return;
  if (s <= x && x <= e) {
    if (isOdd)
      sum += segodd[i] - segeven[i];
    else
      sum += segeven[i] - segodd[i];
  }
  if (s == e) return;
  int m = (s + e) / 2;
  query(s, m, x, isOdd, 2 * i + 1);
  query(m + 1, e, x, isOdd, 2 * i + 2);
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < n; i++) cin >> strength[i];
  for (int i = 0; i < n - 1; i++) {
    int u, v;
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  dfs(1, 0);
  while (m--) {
    int q, x, v;
    cin >> q;
    if (q == 1) {
      cin >> x >> v;
      add(0, n - 1, st[x], en[x], v, level[x] % 2, 0);
    } else if (q == 2) {
      cin >> x;
      sum = 0;
      query(0, n - 1, st[x], level[x] % 2, 0);
      cout << strength[x - 1] + sum << "\n";
    }
  }
  return 0;
}
