#include <bits/stdc++.h>
using namespace std;
const int maxn = 2e5 + 2;
int a[maxn];
struct rmq {
  int l, r;
  int val, add;
};
void build(int l, int r, int v, vector<rmq>& T) {
  T[v].l = l, T[v].r = r, T[v].val = T[v].add = 0;
  if (r - l > 1) {
    build(l, (r + l) >> 1, v * 2, T);
    build((r + l) >> 1, r, v * 2 + 1, T);
  }
}
void push(int v, vector<rmq>& T) {
  if (T[v].add != 0) {
    if (T[v].r - T[v].l > 1) {
      T[v * 2].add += T[v].add, T[v * 2 + 1].add += T[v].add;
    }
    T[v].val += T[v].add, T[v].add = 0;
  }
}
void Add(int l, int r, int v, int x, vector<rmq>& T) {
  push(v, T);
  if (l >= T[v].r || r <= T[v].l) return;
  if (l <= T[v].l && T[v].r <= r) {
    T[v].add = x;
    push(v, T);
  } else {
    Add(l, r, v * 2, x, T);
    Add(l, r, v * 2 + 1, x, T);
  }
}
int Get(int k, int v, vector<rmq>& T) {
  push(v, T);
  if (k >= T[v].r || k < T[v].l) return -1e9;
  if (T[v].r - T[v].l == 1) {
    return T[v].val;
  } else {
    int a = Get(k, v * 2, T);
    int b = Get(k, v * 2 + 1, T);
    return (a > b ? a : b);
  }
}
bool used[maxn];
int tin[maxn], tout[maxn], Par[maxn], cnt = 0;
vector<vector<int> > g(maxn);
void dfs(int v, int par) {
  used[v] = 1;
  tin[v] = cnt++, Par[v] = par;
  for (int i = 0; i < g[v].size(); i++) {
    int to = g[v][i];
    if (!used[to]) {
      dfs(to, par ^ 1);
    }
  }
  tout[v] = cnt++;
}
int main() {
  vector<rmq> T_1, T_2;
  int n;
  cin >> n;
  int q;
  cin >> q;
  for (int i = 0; i < n; i++) cin >> a[i];
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    cin >> a >> b;
    --a, --b;
    g[a].push_back(b);
    g[b].push_back(a);
  }
  dfs(0, 0);
  T_1.resize(4 * cnt + 1);
  T_2.resize(4 * cnt + 1);
  build(0, cnt + 1, 1, T_1);
  build(0, cnt + 1, 1, T_2);
  for (int i = 0; i < n; i++) {
    if (!Par[i]) {
      Add(tin[i], tin[i] + 1, 1, a[i], T_1);
    } else {
      Add(tin[i], tin[i] + 1, 1, a[i], T_2);
    }
  }
  for (int it = 0; it < q; it++) {
    int op;
    int node, x;
    cin >> op >> node;
    --node;
    if (op == 1) {
      cin >> x;
      int mul = 1;
      if (Par[node]) mul = -1;
      Add(tin[node], tout[node], 1, x * mul, T_1);
      Add(tin[node], tout[node], 1, -x * mul, T_2);
    } else {
      int ans;
      if (!Par[node]) {
        ans = Get(tin[node], 1, T_1);
      } else {
        ans = Get(tin[node], 1, T_2);
      }
      cout << ans << "\n";
    }
  }
  return 0;
}
