#include <bits/stdc++.h>
#pragma comment(linker, "/STACK:512000000")
using namespace std;
template <class T>
inline T sqr(T x) {
  return x * x;
}
template <class T>
inline string tostr(const T& x) {
  stringstream ss;
  ss << x;
  return ss.str();
}
const long double EPS = 1e-10;
const int INF = 1000 * 1000 * 1000;
const char CINF = 102;
const long long LINF = INF * 1ll * INF;
const long double DINF = 1e200;
const long double PI = 3.1415926535897932384626433832795L;
int gcd(int a, int b) { return a ? gcd(b % a, a) : b; }
long long gcd(long long a, long long b) { return a ? gcd(b % a, a) : b; }
long long tree[1000000];
void addval(long long v, int l, int r, int a, int b, int k) {
  if (l <= a && r >= b) {
    tree[k] += v;
    return;
  }
  if (r <= a || l >= b) return;
  int c = (a + b) / 2;
  addval(v, l, r, a, c, k * 2 + 1);
  addval(v, l, r, c, b, k * 2 + 2);
}
long long getval(int p, int a, int b, int k) {
  if (b == a + 1) return tree[k];
  int c = (a + b) / 2;
  if (p < c)
    return tree[k] + getval(p, a, c, k * 2 + 1);
  else
    return tree[k] + getval(p, c, b, k * 2 + 2);
}
vector<int> gr[210000];
int D[210000];
int tin[210000];
int tout[210000];
int A0[210000];
int cnt;
void dfs1(int v, int d, int pr) {
  D[v] = d;
  tin[v] = cnt++;
  for (int i = 0; i < (((int)(gr[v]).size())); ++i) {
    int p = gr[v][i];
    if (p == pr) continue;
    dfs1(p, d + 1, v);
  }
  tout[v] = cnt;
}
int main() {
  ios_base::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  for (int i = 0; i < (n); ++i) {
    cin >> A0[i];
  }
  for (int i = 0; i < (n - 1); ++i) {
    int a, b;
    cin >> a >> b;
    --a;
    --b;
    gr[a].push_back(b);
    gr[b].push_back(a);
  }
  dfs1(0, 0, 0);
  if (cnt != n) exit(55);
  for (int qq = 0; qq < (m); ++qq) {
    int t, v;
    cin >> t >> v;
    --v;
    if (t == 1) {
      int x;
      cin >> x;
      if (D[v] % 2) x = -x;
      addval(x, tin[v], tout[v], 0, n, 0);
    } else {
      cout << A0[v] + (D[v] % 2 ? -1 : 1) * getval(tin[v], 0, n, 0) << '\n';
    }
  }
  return 0;
}
