#pragma GCC optimize("O3,unroll-loops")
#pragma GCC target("avx2,popcnt,lzcnt,abm,bmi,bmi2")
#include<bits/stdc++.h>
using namespace std;
__attribute__((always_inline)) inline void smax(int& x, int y){
x > y ? x : (x = y);
}
const int N=2e5+5;
int seg[4*N];
void update(int node,int l,int r,int pos,int val)
{
if(l>pos||r<pos) return;
if(l==pos&&r==pos){
seg[node]=val;
return;
}
int mid=(l+r)>>1;
if(pos<=mid) update(node*2,l,mid,pos,val);
else update(node*2+1,mid+1,r,pos,val);
seg[node]=max(seg[node*2],seg[node*2+1]);
}
int query(int node,int l,int r,int u,int v)
{
if(l>v||r<u) return 0;
if(l>=u&&r<=v) return seg[node];
int mid=(l+r)>>1;
return max(query(node*2,l,mid,u,v),query(node*2+1,mid+1,r,u,v));
}
int par[N];
vector<int> adj[N];
void dfs_par(int u,int p)
{
par[u]=p;
for(auto itr=adj[u].begin();itr!=adj[u].end();itr++){
if(*itr==p){
adj[u].erase(itr);
break;
}
}
for(int v:adj[u]){
dfs_par(v,u);
}
}
int sz[N],dep[N];
void dfs_sz(int u){
//sz[u]=1;
for(int v:adj[u]){
dep[v]=dep[u]+1;
dfs_sz(v);
sz[u]+=sz[v];
if(sz[v]>sz[adj[u][0]]) swap(v,adj[u][0]);
}
}
int cur_tour=1;
int tin[N],nxt[N],tour[N];
void HLD(int u)
{
tour[cur_tour]=u;
tin[u]=cur_tour;
cur_tour++;
for(int v:adj[u]){
if(v==adj[u][0]) nxt[v]=nxt[u];
else nxt[v]=v;
HLD(v);
}
}
int A[N];
void build(int node,int l,int r)
{
if(l==r){
seg[node]=A[tour[l]];
return;
}
int mid=(l+r)>>1;
build(node*2,l,mid);
build(node*2+1,mid+1,r);
seg[node]=max(seg[node*2],seg[node*2+1]);
}
int query_path(int u,int v,int n)
{
int ans=0;
while(nxt[u]!=nxt[v]){
if(dep[nxt[u]]<dep[nxt[v]]) swap(u,v);
smax(ans,query(1,1,n,tin[nxt[u]],tin[u]));
u=par[nxt[u]];
}
if(dep[u]>dep[v]) swap(u,v);
smax(ans,query(1,1,n,tin[u],tin[v]));
return ans;
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int n,q;
cin>>n>>q;
for(int a=1;a<=n;a++){
cin>>A[a];
}
for(int a=0;a<n-1;a++){
int x,y;
cin>>x>>y;
adj[x].push_back(y);
adj[y].push_back(x);
}
dfs_par(1,1);
dfs_sz(1);
nxt[1]=1;
HLD(1);
build(1,1,n);
while(q--){
int type;
cin>>type;
if(type==1){
int u,val;
cin>>u>>val;
update(1,1,n,tin[u],val);
}
else{
int u,v;
cin>>u>>v;
cout<<query_path(u,v,n)<<" ";
}
}
}
I3ByYWdtYSBHQ0Mgb3B0aW1pemUoIk8zLHVucm9sbC1sb29wcyIpCiNwcmFnbWEgR0NDIHRhcmdldCgiYXZ4Mixwb3BjbnQsbHpjbnQsYWJtLGJtaSxibWkyIikKI2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKX19hdHRyaWJ1dGVfXygoYWx3YXlzX2lubGluZSkpIGlubGluZSB2b2lkIHNtYXgoaW50JiB4LCBpbnQgeSl7CiAgICB4ID4geSA/IHggOiAoeCA9IHkpOwp9CmNvbnN0IGludCBOPTJlNSs1OwppbnQgc2VnWzQqTl07CnZvaWQgdXBkYXRlKGludCBub2RlLGludCBsLGludCByLGludCBwb3MsaW50IHZhbCkKewogICAgaWYobD5wb3N8fHI8cG9zKSByZXR1cm47CiAgICBpZihsPT1wb3MmJnI9PXBvcyl7CiAgICAgICAgc2VnW25vZGVdPXZhbDsKICAgICAgICByZXR1cm47CiAgICB9CiAgICBpbnQgbWlkPShsK3IpPj4xOwogICAgaWYocG9zPD1taWQpIHVwZGF0ZShub2RlKjIsbCxtaWQscG9zLHZhbCk7CiAgICBlbHNlIHVwZGF0ZShub2RlKjIrMSxtaWQrMSxyLHBvcyx2YWwpOwogICAgc2VnW25vZGVdPW1heChzZWdbbm9kZSoyXSxzZWdbbm9kZSoyKzFdKTsKfQppbnQgcXVlcnkoaW50IG5vZGUsaW50IGwsaW50IHIsaW50IHUsaW50IHYpCnsKICAgIGlmKGw+dnx8cjx1KSByZXR1cm4gMDsKICAgIGlmKGw+PXUmJnI8PXYpIHJldHVybiBzZWdbbm9kZV07CiAgICBpbnQgbWlkPShsK3IpPj4xOwogICAgcmV0dXJuIG1heChxdWVyeShub2RlKjIsbCxtaWQsdSx2KSxxdWVyeShub2RlKjIrMSxtaWQrMSxyLHUsdikpOwp9CmludCBwYXJbTl07CnZlY3RvcjxpbnQ+IGFkaltOXTsKdm9pZCBkZnNfcGFyKGludCB1LGludCBwKQp7CiAgICBwYXJbdV09cDsKICAgIGZvcihhdXRvIGl0cj1hZGpbdV0uYmVnaW4oKTtpdHIhPWFkalt1XS5lbmQoKTtpdHIrKyl7CiAgICAgICAgaWYoKml0cj09cCl7CiAgICAgICAgICAgIGFkalt1XS5lcmFzZShpdHIpOwogICAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICB9CiAgICBmb3IoaW50IHY6YWRqW3VdKXsKICAgICAgICBkZnNfcGFyKHYsdSk7CiAgICB9Cn0KaW50IHN6W05dLGRlcFtOXTsKdm9pZCBkZnNfc3ooaW50IHUpewogICAgLy9zelt1XT0xOwogICAgZm9yKGludCB2OmFkalt1XSl7CiAgICAgICAgZGVwW3ZdPWRlcFt1XSsxOwogICAgICAgIGRmc19zeih2KTsKICAgICAgICBzelt1XSs9c3pbdl07CiAgICAgICAgaWYoc3pbdl0+c3pbYWRqW3VdWzBdXSkgc3dhcCh2LGFkalt1XVswXSk7CiAgICB9Cn0KaW50IGN1cl90b3VyPTE7CmludCB0aW5bTl0sbnh0W05dLHRvdXJbTl07CnZvaWQgSExEKGludCB1KQp7CiAgICB0b3VyW2N1cl90b3VyXT11OwogICAgdGluW3VdPWN1cl90b3VyOwogICAgY3VyX3RvdXIrKzsKICAgIGZvcihpbnQgdjphZGpbdV0pewogICAgICAgIGlmKHY9PWFkalt1XVswXSkgbnh0W3ZdPW54dFt1XTsKICAgICAgICBlbHNlIG54dFt2XT12OwogICAgICAgIEhMRCh2KTsKICAgIH0KfQppbnQgQVtOXTsKdm9pZCBidWlsZChpbnQgbm9kZSxpbnQgbCxpbnQgcikKewogICAgaWYobD09cil7CiAgICAgICAgc2VnW25vZGVdPUFbdG91cltsXV07CiAgICAgICAgcmV0dXJuOwogICAgfQogICAgaW50IG1pZD0obCtyKT4+MTsKICAgIGJ1aWxkKG5vZGUqMixsLG1pZCk7CiAgICBidWlsZChub2RlKjIrMSxtaWQrMSxyKTsKICAgIHNlZ1tub2RlXT1tYXgoc2VnW25vZGUqMl0sc2VnW25vZGUqMisxXSk7Cn0KaW50IHF1ZXJ5X3BhdGgoaW50IHUsaW50IHYsaW50IG4pCnsKICAgIGludCBhbnM9MDsKICAgIHdoaWxlKG54dFt1XSE9bnh0W3ZdKXsKICAgICAgICBpZihkZXBbbnh0W3VdXTxkZXBbbnh0W3ZdXSkgc3dhcCh1LHYpOwogICAgICAgIHNtYXgoYW5zLHF1ZXJ5KDEsMSxuLHRpbltueHRbdV1dLHRpblt1XSkpOwogICAgICAgIHU9cGFyW254dFt1XV07CiAgICB9CiAgICBpZihkZXBbdV0+ZGVwW3ZdKSBzd2FwKHUsdik7CiAgICBzbWF4KGFucyxxdWVyeSgxLDEsbix0aW5bdV0sdGluW3ZdKSk7CiAgICByZXR1cm4gYW5zOwp9CmludCBtYWluKCkKewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbyhmYWxzZSk7CiAgICBjaW4udGllKDApOwogICAgY291dC50aWUoMCk7CiAgICBpbnQgbixxOwogICAgY2luPj5uPj5xOwogICAgZm9yKGludCBhPTE7YTw9bjthKyspewogICAgICAgIGNpbj4+QVthXTsKICAgIH0KICAgIGZvcihpbnQgYT0wO2E8bi0xO2ErKyl7CiAgICAgICAgaW50IHgseTsKICAgICAgICBjaW4+Png+Pnk7CiAgICAgICAgYWRqW3hdLnB1c2hfYmFjayh5KTsKICAgICAgICBhZGpbeV0ucHVzaF9iYWNrKHgpOwogICAgfQogICAgZGZzX3BhcigxLDEpOwogICAgZGZzX3N6KDEpOwogICAgbnh0WzFdPTE7CiAgICBITEQoMSk7CiAgICBidWlsZCgxLDEsbik7CiAgICB3aGlsZShxLS0pewogICAgICAgIGludCB0eXBlOwogICAgICAgIGNpbj4+dHlwZTsKICAgICAgICBpZih0eXBlPT0xKXsKICAgICAgICAgICAgaW50IHUsdmFsOwogICAgICAgICAgICBjaW4+PnU+PnZhbDsKICAgICAgICAgICAgdXBkYXRlKDEsMSxuLHRpblt1XSx2YWwpOwogICAgICAgIH0KICAgICAgICBlbHNlewogICAgICAgICAgICBpbnQgdSx2OwogICAgICAgICAgICBjaW4+PnU+PnY7CiAgICAgICAgICAgIGNvdXQ8PHF1ZXJ5X3BhdGgodSx2LG4pPDwiICI7CiAgICAgICAgfQogICAgfQp9Cg==