#include <bits/stdc++.h>
using namespace std;
int nr[2] = {0, 0};
int n, m;
vector<vector<int> > T(2);
int l, size;
void Stworz(int n) {
  int p = 1;
  while (p < n) p *= 2;
  l = p;
  size = 2 * p - 1;
  for (int i = 0; i < 2; ++i)
    for (int j = 0; j <= size; ++j) T[i].push_back(0);
}
void Dodaj(int nr, int a, int b, int x) {
  a += l;
  b += l;
  T[nr][a] += x;
  if (a != b) T[nr][b] += x;
  while (a / 2 != b / 2) {
    if (a % 2 == 0) T[nr][a + 1] += x;
    if (b % 2 == 1) T[nr][b - 1] += x;
    a /= 2;
    b /= 2;
  }
}
int Suma(int nr, int a) {
  a += l;
  int s = 0;
  while (a != 0) {
    s += T[nr][a];
    a /= 2;
  }
  return s;
}
void dfs(int akt, int oj, vector<vector<int> >& T, vector<int>& nry,
         vector<vector<int> >& wlk, vector<int>& odl, vector<int>& przec) {
  nry[akt] = nr[odl[akt]];
  ++nr[odl[akt]];
  for (int i = 0; i < T[akt].size(); ++i)
    if (T[akt][i] != oj) dfs(T[akt][i], akt, T, nry, wlk, odl, przec);
  ++wlk[akt][0];
  for (int i = 0; i < T[akt].size(); ++i) {
    if (T[akt][i] != oj) {
      wlk[akt][0] += wlk[T[akt][i]][1];
      wlk[akt][1] += wlk[T[akt][i]][0];
    }
  }
  if ((akt == 0 && n >= 2) || T[akt].size() >= 2) {
    przec[akt] = n;
    for (int i = 0; i < T[akt].size(); ++i)
      if (T[akt][i] != oj) przec[akt] = min(przec[akt], nry[T[akt][i]]);
  }
}
int main() {
  ios_base::sync_with_stdio(0);
  cin >> n >> m;
  vector<int> a(n);
  for (int i = 0; i < n; ++i) cin >> a[i];
  vector<vector<int> > T(n);
  for (int i = 0; i < n - 1; ++i) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    T[a].push_back(b);
    T[b].push_back(a);
  }
  vector<int> odl(n);
  queue<int> Q;
  vector<bool> odw(n, false);
  odl[0] = 0;
  Q.push(0);
  odw[0] = true;
  while (!Q.empty()) {
    int akt = Q.front();
    Q.pop();
    for (int i = 0; i < T[akt].size(); ++i) {
      if (!odw[T[akt][i]]) {
        odw[T[akt][i]] = true;
        Q.push(T[akt][i]);
        odl[T[akt][i]] = (odl[akt] + 1) % 2;
      }
    }
  }
  vector<int> nry(n);
  vector<vector<int> > wlk(n, vector<int>(2, 0));
  vector<int> przec(n, -1);
  dfs(0, -1, T, nry, wlk, odl, przec);
  Stworz(n);
  for (int i = 0; i < m; ++i) {
    int op;
    cin >> op;
    if (op == 1) {
      int x, val;
      cin >> x >> val;
      --x;
      if (odl[x] == 0) {
        Dodaj(0, nry[x], nry[x] + wlk[x][0] - 1, val);
        if (przec[x] != -1) Dodaj(1, przec[x], przec[x] + wlk[x][1] - 1, -val);
      } else {
        Dodaj(1, nry[x], nry[x] + wlk[x][0] - 1, val);
        if (przec[x] != -1) Dodaj(0, przec[x], przec[x] + wlk[x][1] - 1, -val);
      }
    } else {
      int x;
      cin >> x;
      --x;
      cout << a[x] + Suma(odl[x], nry[x]) << endl;
    }
  }
  return 0;
}
