#include <bits/stdc++.h>
using namespace std;
const int MOD = 1000000007;
const int MAX = 200005;
int arr[MAX];
int enter[MAX];
int ex[MAX];
int dist[MAX];
vector<int> g[MAX];
int t = 0;
void dfs(int st, int par) {
  t++;
  enter[st] = t;
  for (int i : g[st]) {
    if (i == par) {
      continue;
    }
    dist[i] = dist[st] + 1;
    dfs(i, st);
  }
  ex[st] = t;
}
struct BIT {
  int tree[MAX];
  void upd(int idx, int val) {
    while (idx < MAX - 1) {
      tree[idx] += val;
      idx += (idx & -idx);
    }
  }
  int get(int idx) {
    int ans = 0;
    while (idx > 0) {
      ans += tree[idx];
      idx -= (idx & -idx);
    }
    return ans;
  }
};
BIT even;
BIT odd;
int main() {
  int n, q;
  scanf("%d %d", &n, &q);
  for (int i = 0; i < n; i++) {
    scanf("%d", &arr[i]);
  };
  for (int i = 0; i < n - 1; i++) {
    int a, b;
    scanf("%d %d", &a, &b);
    g[a].push_back(b);
    g[b].push_back(a);
  }
  dfs(1, -1);
  for (int i = 0; i < q; i++) {
    int qtype;
    scanf("%d", &qtype);
    if (qtype == 1) {
      int x, val;
      scanf("%d %d", &x, &val);
      if (dist[x] % 2 == 0) {
        even.upd(enter[x], val);
        even.upd(ex[x] + 1, -val);
      } else {
        odd.upd(enter[x], val);
        odd.upd(ex[x] + 1, -val);
      }
    } else {
      int x;
      scanf("%d", &x);
      int a = even.get(enter[x]);
      int b = odd.get(enter[x]);
      if (dist[x] % 2 == 0) {
        cout << a - b + arr[x - 1] << endl;
      } else {
        cout << b - a + arr[x - 1] << endl;
      }
    }
  }
}
