#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=210000;
vector<int> g[maxn];
int n,m;
int l[maxn],r[maxn];
int coeff[maxn];
int init[maxn];
int deep;
int dfs(int u,int pre,int c)
{
l[u]=deep; coeff[u]=c;
for(auto& v : g[u])
{
if(v==pre) continue;
deep++;
dfs(v,u,-c);
}
r[u]=deep;
}
int lowbit(int x) { return x&(-x); }
int tree[maxn];
void add(int p,int v)
{
for(int i=p;i<=n;i+=lowbit(i)) tree[i]+=v;
}
int sum(int v)
{
int ans=0;
for(int i=l[v];i>0;i-=lowbit(i))
ans+=tree[i];
return ans;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%d",init+i);
}
for(int i=0;i<n-1;i++)
{
int u,v;
scanf("%d%d",&u,&v);
g[u].push_back(v);
g[v].push_back(u);
}
deep=1;
dfs(1,0,1);
while(m--)
{
int cmd,x,y;
scanf("%d%d",&cmd,&x);
if(cmd==1)
{
scanf("%d",&y);
int v=coeff[x]*y;
add(l[x],v); add(r[x]+1,-v);
}
else
{
int ans=sum(x);
printf("%d\n",init[x]+coeff[x]*ans);
}
}
return 0;
}