#include<bits/stdc++.h>
#define ll long long
#define ld long double
#define endl "\n"
#define task "gia tri cuc dai"
using namespace std;
int n,q,a[200009];
vector<int>ke[200009];
int depth[200009],par[200009],siz[200009],heavy[200009];
void dfs(int u,int prev)
{
par[u]=prev;
depth[u]=depth[prev]+1;
siz[u]=1;
int gmax=0;
for(auto i:ke[u])
{
if(prev!=i)
{
dfs(i,u);
if(gmax<siz[i])
{
heavy[u]=i;
gmax=siz[i];
}
siz[u]+=siz[i];
}
}
}
int head[200009],pos[200009],tp;
void hld(int u,int acs)
{
head[u]=acs;
pos[u]=++tp;
for(auto i:ke[u]) if(heavy[u]==i) hld(i,acs);
for(auto i:ke[u]) if(i!=par[u]&&heavy[u]!=i) hld(i,i);
}
int tree[400009];
void update(int pos,int val)
{
pos=n+pos-1;
tree[pos]=val;
while(pos>1)
{
pos/=2;
tree[pos]=max(tree[pos*2],tree[pos*2+1]);
}
}
int get(int l,int r)
{
l=n+l-1;
r=n+r-1;
int res=0;
while(l<=r)
{
if(l%2!=0)
{
res=max(res,tree[l]);
l++;
}
if(r%2==0)
{
res=max(res,tree[r]);
r--;
}
l/=2;
r/=2;
}
return res;
}
int query(int x,int y)
{
int res=0;
while(head[x]!=head[y])
{
if(depth[head[x]]<depth[head[y]]) swap(x,y);
res=max(res,get(pos[head[x]],pos[x]));
x=par[head[x]];
}
if(depth[x]<depth[y]) swap(x,y);
res=max(res,get(pos[y],pos[x]));
return res;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(nullptr);
cout.tie(nullptr);
if(fopen(task".inp","r"))
{
freopen(task".inp","r",stdin);
freopen(task".out","w",stdout);
}
cin>>n>>q;
for(int i=1;i<=n;i++) cin>>a[i];
for(int i=1;i<n;i++)
{
int x,y;
cin>>x>>y;
ke[x].push_back(y);
ke[y].push_back(x);
}
dfs(1,0);
hld(1,1);
for(int i=1;i<=n;i++) update(pos[i],a[i]);
while(q--)
{
int type,x,y;
cin>>type>>x>>y;
if(type==1) update(pos[x],y);
else cout<<query(x,y)<<" ";
}
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBsZCBsb25nIGRvdWJsZQojZGVmaW5lIGVuZGwgIlxuIgojZGVmaW5lIHRhc2sgImdpYSB0cmkgY3VjIGRhaSIKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKaW50IG4scSxhWzIwMDAwOV07CnZlY3RvcjxpbnQ+a2VbMjAwMDA5XTsKaW50IGRlcHRoWzIwMDAwOV0scGFyWzIwMDAwOV0sc2l6WzIwMDAwOV0saGVhdnlbMjAwMDA5XTsKdm9pZCBkZnMoaW50IHUsaW50IHByZXYpCnsKCXBhclt1XT1wcmV2OwoJZGVwdGhbdV09ZGVwdGhbcHJldl0rMTsKCXNpelt1XT0xOwoJaW50IGdtYXg9MDsKCWZvcihhdXRvIGk6a2VbdV0pCgl7CgkJaWYocHJldiE9aSkKCQl7CgkJCWRmcyhpLHUpOwoJCQlpZihnbWF4PHNpeltpXSkKCQkJewoJCQkJaGVhdnlbdV09aTsKCQkJCWdtYXg9c2l6W2ldOwoJCQl9CgkJCXNpelt1XSs9c2l6W2ldOwoJCX0KCX0KfQppbnQgaGVhZFsyMDAwMDldLHBvc1syMDAwMDldLHRwOwp2b2lkIGhsZChpbnQgdSxpbnQgYWNzKQp7CgloZWFkW3VdPWFjczsKCXBvc1t1XT0rK3RwOwoJZm9yKGF1dG8gaTprZVt1XSkgaWYoaGVhdnlbdV09PWkpIGhsZChpLGFjcyk7Cglmb3IoYXV0byBpOmtlW3VdKSBpZihpIT1wYXJbdV0mJmhlYXZ5W3VdIT1pKSBobGQoaSxpKTsKfQppbnQgdHJlZVs0MDAwMDldOwp2b2lkIHVwZGF0ZShpbnQgcG9zLGludCB2YWwpCnsKCXBvcz1uK3Bvcy0xOwoJdHJlZVtwb3NdPXZhbDsKCXdoaWxlKHBvcz4xKQoJewoJCXBvcy89MjsKCQl0cmVlW3Bvc109bWF4KHRyZWVbcG9zKjJdLHRyZWVbcG9zKjIrMV0pOwoJfQp9CmludCBnZXQoaW50IGwsaW50IHIpCnsKCWw9bitsLTE7CglyPW4rci0xOwoJaW50IHJlcz0wOwoJd2hpbGUobDw9cikKCXsKCQlpZihsJTIhPTApCgkJewoJCQlyZXM9bWF4KHJlcyx0cmVlW2xdKTsKCQkJbCsrOwoJCX0KCQlpZihyJTI9PTApCgkJewoJCQlyZXM9bWF4KHJlcyx0cmVlW3JdKTsKCQkJci0tOwoJCX0KCQlsLz0yOwoJCXIvPTI7Cgl9CglyZXR1cm4gcmVzOwp9CmludCBxdWVyeShpbnQgeCxpbnQgeSkKewoJaW50IHJlcz0wOwoJd2hpbGUoaGVhZFt4XSE9aGVhZFt5XSkKCXsKCQlpZihkZXB0aFtoZWFkW3hdXTxkZXB0aFtoZWFkW3ldXSkgc3dhcCh4LHkpOwoJCXJlcz1tYXgocmVzLGdldChwb3NbaGVhZFt4XV0scG9zW3hdKSk7CgkJeD1wYXJbaGVhZFt4XV07Cgl9CglpZihkZXB0aFt4XTxkZXB0aFt5XSkgc3dhcCh4LHkpOwoJcmVzPW1heChyZXMsZ2V0KHBvc1t5XSxwb3NbeF0pKTsKCXJldHVybiByZXM7Cn0KaW50IG1haW4oKQp7CiAgICBpb3NfYmFzZTo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKICAgIGNpbi50aWUobnVsbHB0cik7CiAgICBjb3V0LnRpZShudWxscHRyKTsKICAgIGlmKGZvcGVuKHRhc2siLmlucCIsInIiKSkKICAgIHsKICAgICAgICBmcmVvcGVuKHRhc2siLmlucCIsInIiLHN0ZGluKTsKICAgICAgICBmcmVvcGVuKHRhc2siLm91dCIsInciLHN0ZG91dCk7CiAgICB9CiAgICBjaW4+Pm4+PnE7CiAgICBmb3IoaW50IGk9MTtpPD1uO2krKykgY2luPj5hW2ldOwogICAgZm9yKGludCBpPTE7aTxuO2krKykKICAgIHsKICAgIAlpbnQgeCx5OwogICAgCWNpbj4+eD4+eTsKICAgIAlrZVt4XS5wdXNoX2JhY2soeSk7CiAgICAJa2VbeV0ucHVzaF9iYWNrKHgpOwogICAgfQogICAgZGZzKDEsMCk7CiAgICBobGQoMSwxKTsKICAgIGZvcihpbnQgaT0xO2k8PW47aSsrKSB1cGRhdGUocG9zW2ldLGFbaV0pOwogICAgd2hpbGUocS0tKQogICAgewogICAgCWludCB0eXBlLHgseTsKICAgIAljaW4+PnR5cGU+Png+Pnk7CiAgICAJaWYodHlwZT09MSkgdXBkYXRlKHBvc1t4XSx5KTsKICAgIAllbHNlIGNvdXQ8PHF1ZXJ5KHgseSk8PCIgIjsKICAgIH0KfQ==