#include <bits/stdc++.h>
using namespace std;
inline void printA(long long int _a[], long long int _to,
                   long long int _from = 0) {
  for (long long int _i = _from; _i < _to; _i++) cout << _a[_i] << ' ';
  cout << '\n';
}
inline void printV(vector<long long int> _a, long long int _to,
                   long long int _from = 0) {
  for (long long int _i = _from; _i < _to; _i++) cout << _a[_i] << ' ';
  cout << '\n';
}
inline void INP() {}
const long long int inf = 0x3f3f3f3f;
const long long int INF = 0x3f3f3f3f3f3f3f3f;
long long int n, m, k, q, d, TIME;
string s;
vector<long long int> adj[(long long int)2e5 + 5];
long long int vis[(long long int)2e5 + 5], Start[(long long int)2e5 + 5],
    End[(long long int)2e5 + 5], Depth[(long long int)2e5 + 5],
    a[(long long int)2e5 + 5];
class Fenwick {
 public:
  vector<long long int> BIT;
  void init() {
    long long int nn = n + 10;
    BIT.clear();
    BIT.resize(nn, 0);
  }
  void update(long long int i, long long int val) {
    for (; i <= n; i += (i & (-i))) BIT[i] += val;
  }
  long long int query(long long int i) {
    long long int sum = 0;
    for (; i > 0; i -= (i & (-i))) sum += BIT[i];
    return sum;
  }
} odd, even;
void dfs(long long int i, long long int p = 0, long long int d = 0) {
  vis[i] = 1;
  Start[i] = ++TIME;
  Depth[i] = d;
  for (auto j : adj[i]) {
    if (j == p) continue;
    if (!vis[j]) {
      dfs(j, i, d + 1);
    }
  }
  End[i] = TIME;
}
void go() {
  cin >> n >> m;
  odd.init();
  even.init();
  for (long long int i = 1; i < n + 1; i++) cin >> a[i];
  for (long long int i = 0; i < n - 1; i++) {
    long long int u, v;
    cin >> u >> v;
    adj[u].push_back(v);
    adj[v].push_back(u);
  }
  dfs(1);
  while (m--) {
    long long int qq, x;
    cin >> qq >> x;
    if (qq == 1) {
      long long int val;
      cin >> val;
      if (Depth[x] & 1) {
        odd.update(Start[x], val);
        odd.update(End[x] + 1, -val);
      } else {
        even.update(Start[x], val);
        even.update(End[x] + 1, -val);
      }
    } else {
      long long int ans = a[x];
      if (Depth[x] & 1) {
        ans += odd.query(Start[x]) - even.query(Start[x]);
      } else {
        ans += even.query(Start[x]) - odd.query(Start[x]);
      }
      cout << ans << '\n';
    }
  }
}
int32_t main() {
  INP();
  ios::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  ;
  long long int t = 1;
  while (t--) go();
}
