#include <bits/stdc++.h>
using namespace std;
#pragma GCC optimize ("O2")
#pragma GCC optimize ("unroll-loops")
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update>
#define ll long long
#define pii pair<ll,ll>
#define fi first
#define sec second
#define ld long double
const ll MOD = 1e9 + 7;
const ll N = 2e5 + 5;
const ll INF = 2e18;
ll a[N], sz[N], heavy[N], tin[N], dep[N], root[N];
ll up[N][30];
vector<ll>adj[N];
struct segtree{
ll n;
vector<ll>sg;
segtree(ll _n = 0) : n(_n), sg(4 * n + 5) {}
void upd(ll l, ll r, ll cur, ll idx, ll val){
if(l == r) sg[cur] = val;
else{
ll mid = (l + r) / 2;
if(idx <= mid) upd(l, mid, cur * 2, idx, val);
else upd(mid + 1, r, cur * 2 + 1, idx, val);
sg[cur] = max(sg[cur * 2], sg[cur * 2 + 1]);
}
}
ll query(ll l, ll r, ll cur, ll x, ll y){
if(l > y || r < x) return -INF;
if(l >= x && r <= y) return sg[cur];
ll mid = (l + r) / 2;
return max(query(l, mid, cur * 2, x, y), query(mid + 1, r, cur * 2 + 1, x, y));
}
} sg(N);
void init(ll idx, ll par){
ll mx = -1;
heavy[idx] = root[idx] = idx, sz[idx] = 1;
for(auto i : adj[idx]){
if(i != par){
dep[i] = dep[idx] + 1;
up[i][0] = idx;
for(ll bit = 1; bit < 20; bit++){
up[i][bit] = up[up[i][bit - 1]][bit - 1];
}
init(i, idx);
sz[idx] += sz[i];
if(mx > sz[i]){
mx = sz[i];
heavy[idx] = i;
}
}
}
}
ll t = 0;
void build_hld(ll idx, ll par){
tin[idx] = ++t;
if(heavy[idx] != idx){
root[heavy[idx]] = root[idx];
build_hld(heavy[idx], idx);
}
for(auto i : adj[idx]){
if(i != par && i != heavy[idx]){
build_hld(i, idx);
}
}
}
ll get_lca(ll a, ll b){
if(dep[a] < dep[b]) swap(a, b);
ll res = dep[a] - dep[b];
for(ll i = 19; i >= 0; --i){
if(res & (1LL << i)) a = up[a][i];
}
if(a == b) return a;
for(ll i = 19; i >= 0; --i){
if(up[a][i] != up[b][i]) a = up[a][i], b = up[b][i];
}
return up[a][0];
}
ll get(ll a, ll b){
ll mx = -INF;
while(a != b){
if(dep[b] > dep[root[a]]){
mx = max(mx, sg.query(1, t, 1, tin[a], tin[b]));
break;
}
mx = max(mx, sg.query(1, t, 1, tin[root[a]], tin[a]));
a = up[root[a]][0];
}
return mx;
}
int32_t main(){
cin.tie(0)->sync_with_stdio(0);
int tc = 1, cnt = 0;
// cin >> tc;
for(;tc; cnt++, tc--){
ll n,q; cin >> n >> q;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 2; i <= n; i++){
ll u,v; cin >> u >> v;
adj[u].push_back(v), adj[v].push_back(u);
}
init(1, -1);
build_hld(1, -1);
for(int i = 1; i <= n; i++){
sg.upd(1, t, 1, tin[i], a[i]);
}
for(int i = 1; i <= q; i++){
ll type; cin >> type;
if(type == 1){
ll idx, val; cin >> idx >> val;
sg.upd(1, t, 1, tin[idx], val);
}
else{
ll a,b; cin >> a >> b;
ll anc = get_lca(a, b);
cout << max(get(a, anc), get(b, anc)) << " \n"[i == q];
}
}
}
}
/*
*/
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgojcHJhZ21hIEdDQyBvcHRpbWl6ZSAoIk8yIikKI3ByYWdtYSBHQ0Mgb3B0aW1pemUgKCJ1bnJvbGwtbG9vcHMiKQoKI2luY2x1ZGUgPGV4dC9wYl9kcy9hc3NvY19jb250YWluZXIuaHBwPiAKI2luY2x1ZGUgPGV4dC9wYl9kcy90cmVlX3BvbGljeS5ocHA+IAp1c2luZyBuYW1lc3BhY2UgX19nbnVfcGJkczsgCiNkZWZpbmUgb3JkZXJlZF9zZXQgdHJlZTxpbnQsIG51bGxfdHlwZSxsZXNzPGludD4sIHJiX3RyZWVfdGFnLHRyZWVfb3JkZXJfc3RhdGlzdGljc19ub2RlX3VwZGF0ZT4gCgojZGVmaW5lIGxsIGxvbmcgbG9uZwojZGVmaW5lIHBpaSBwYWlyPGxsLGxsPgojZGVmaW5lIGZpIGZpcnN0CiNkZWZpbmUgc2VjIHNlY29uZAojZGVmaW5lIGxkIGxvbmcgZG91YmxlCgpjb25zdCBsbCBNT0QgPSAxZTkgKyA3Owpjb25zdCBsbCBOID0gMmU1ICsgNTsKY29uc3QgbGwgSU5GID0gMmUxODsKCmxsIGFbTl0sIHN6W05dLCBoZWF2eVtOXSwgdGluW05dLCBkZXBbTl0sIHJvb3RbTl07CmxsIHVwW05dWzMwXTsKCnZlY3RvcjxsbD5hZGpbTl07CgpzdHJ1Y3Qgc2VndHJlZXsKICAgIGxsIG47CiAgICB2ZWN0b3I8bGw+c2c7CgogICAgc2VndHJlZShsbCBfbiA9IDApIDogbihfbiksIHNnKDQgKiBuICsgNSkge30KCiAgICB2b2lkIHVwZChsbCBsLCBsbCByLCBsbCBjdXIsIGxsIGlkeCwgbGwgdmFsKXsKICAgICAgICBpZihsID09IHIpIHNnW2N1cl0gPSB2YWw7CiAgICAgICAgZWxzZXsKICAgICAgICAgICAgbGwgbWlkID0gKGwgKyByKSAvIDI7CiAgICAgICAgICAgIGlmKGlkeCA8PSBtaWQpIHVwZChsLCBtaWQsIGN1ciAqIDIsIGlkeCwgdmFsKTsKICAgICAgICAgICAgZWxzZSB1cGQobWlkICsgMSwgciwgY3VyICogMiArIDEsIGlkeCwgdmFsKTsKCiAgICAgICAgICAgIHNnW2N1cl0gPSBtYXgoc2dbY3VyICogMl0sIHNnW2N1ciAqIDIgKyAxXSk7CiAgICAgICAgfQogICAgfQoKICAgIGxsIHF1ZXJ5KGxsIGwsIGxsIHIsIGxsIGN1ciwgbGwgeCwgbGwgeSl7CiAgICAgICAgaWYobCA+IHkgfHwgciA8IHgpIHJldHVybiAtSU5GOwogICAgICAgIGlmKGwgPj0geCAmJiByIDw9IHkpIHJldHVybiBzZ1tjdXJdOwoKICAgICAgICBsbCBtaWQgPSAobCArIHIpIC8gMjsKICAgICAgICByZXR1cm4gbWF4KHF1ZXJ5KGwsIG1pZCwgY3VyICogMiwgeCwgeSksIHF1ZXJ5KG1pZCArIDEsIHIsIGN1ciAqIDIgKyAxLCB4LCB5KSk7CiAgICB9Cn0gc2coTik7Cgp2b2lkIGluaXQobGwgaWR4LCBsbCBwYXIpewogICAgbGwgbXggPSAtMTsKICAgIGhlYXZ5W2lkeF0gPSByb290W2lkeF0gPSBpZHgsIHN6W2lkeF0gPSAxOwogICAgCiAgICBmb3IoYXV0byBpIDogYWRqW2lkeF0pewogICAgICAgIGlmKGkgIT0gcGFyKXsKICAgICAgICAgICAgZGVwW2ldID0gZGVwW2lkeF0gKyAxOwogICAgICAgICAgICB1cFtpXVswXSA9IGlkeDsKCiAgICAgICAgICAgIGZvcihsbCBiaXQgPSAxOyBiaXQgPCAyMDsgYml0KyspewogICAgICAgICAgICAgICAgdXBbaV1bYml0XSA9IHVwW3VwW2ldW2JpdCAtIDFdXVtiaXQgLSAxXTsKICAgICAgICAgICAgfQoKICAgICAgICAgICAgaW5pdChpLCBpZHgpOwoKICAgICAgICAgICAgc3pbaWR4XSArPSBzeltpXTsKICAgICAgICAgICAgaWYobXggPiBzeltpXSl7CiAgICAgICAgICAgICAgICBteCA9IHN6W2ldOwogICAgICAgICAgICAgICAgaGVhdnlbaWR4XSA9IGk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCmxsIHQgPSAwOwoKdm9pZCBidWlsZF9obGQobGwgaWR4LCBsbCBwYXIpewogICAgdGluW2lkeF0gPSArK3Q7CiAgICBpZihoZWF2eVtpZHhdICE9IGlkeCl7CiAgICAgICAgcm9vdFtoZWF2eVtpZHhdXSA9IHJvb3RbaWR4XTsKICAgICAgICBidWlsZF9obGQoaGVhdnlbaWR4XSwgaWR4KTsKICAgIH0KICAgIAogICAgZm9yKGF1dG8gaSA6IGFkaltpZHhdKXsKICAgICAgICBpZihpICE9IHBhciAmJiBpICE9IGhlYXZ5W2lkeF0pewogICAgICAgICAgICBidWlsZF9obGQoaSwgaWR4KTsKICAgICAgICB9CiAgICB9Cn0KCmxsIGdldF9sY2EobGwgYSwgbGwgYil7CiAgICBpZihkZXBbYV0gPCBkZXBbYl0pIHN3YXAoYSwgYik7CgogICAgbGwgcmVzID0gZGVwW2FdIC0gZGVwW2JdOwoKICAgIGZvcihsbCBpID0gMTk7IGkgPj0gMDsgLS1pKXsKICAgICAgICBpZihyZXMgJiAoMUxMIDw8IGkpKSBhID0gdXBbYV1baV07CiAgICB9CgogICAgaWYoYSA9PSBiKSByZXR1cm4gYTsKCiAgICBmb3IobGwgaSA9IDE5OyBpID49IDA7IC0taSl7CiAgICAgICAgaWYodXBbYV1baV0gIT0gdXBbYl1baV0pIGEgPSB1cFthXVtpXSwgYiA9IHVwW2JdW2ldOwogICAgfQoKICAgIHJldHVybiB1cFthXVswXTsKfQoKbGwgZ2V0KGxsIGEsIGxsIGIpewogICAgbGwgbXggPSAtSU5GOwogICAgd2hpbGUoYSAhPSBiKXsKICAgICAgICBpZihkZXBbYl0gPiBkZXBbcm9vdFthXV0pewogICAgICAgICAgICBteCA9IG1heChteCwgc2cucXVlcnkoMSwgdCwgMSwgdGluW2FdLCB0aW5bYl0pKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQoKICAgICAgICBteCA9IG1heChteCwgc2cucXVlcnkoMSwgdCwgMSwgdGluW3Jvb3RbYV1dLCB0aW5bYV0pKTsKICAgICAgICBhID0gdXBbcm9vdFthXV1bMF07CiAgICB9CgogICAgcmV0dXJuIG14Owp9CgppbnQzMl90IG1haW4oKXsKICAgIGNpbi50aWUoMCktPnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGludCB0YyA9IDEsIGNudCA9IDA7CiAgICAvLyBjaW4gPj4gdGM7CiAgICBmb3IoO3RjOyBjbnQrKywgdGMtLSl7CiAgICAgICAgbGwgbixxOyBjaW4gPj4gbiA+PiBxOwoKICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07CgogICAgICAgIGZvcihpbnQgaSA9IDI7IGkgPD0gbjsgaSsrKXsKICAgICAgICAgICAgbGwgdSx2OyBjaW4gPj4gdSA+PiB2OwogICAgICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpLCBhZGpbdl0ucHVzaF9iYWNrKHUpOwogICAgICAgIH0KCiAgICAgICAgaW5pdCgxLCAtMSk7CiAgICAgICAgYnVpbGRfaGxkKDEsIC0xKTsKCiAgICAgICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgICAgICBzZy51cGQoMSwgdCwgMSwgdGluW2ldLCBhW2ldKTsKICAgICAgICB9CgogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gcTsgaSsrKXsKICAgICAgICAgICAgbGwgdHlwZTsgY2luID4+IHR5cGU7CiAgICAgICAgICAgIGlmKHR5cGUgPT0gMSl7CiAgICAgICAgICAgICAgICBsbCBpZHgsIHZhbDsgY2luID4+IGlkeCA+PiB2YWw7CiAgICAgICAgICAgICAgICBzZy51cGQoMSwgdCwgMSwgdGluW2lkeF0sIHZhbCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZXsKICAgICAgICAgICAgICAgIGxsIGEsYjsgY2luID4+IGEgPj4gYjsKICAgICAgICAgICAgICAgIGxsIGFuYyA9IGdldF9sY2EoYSwgYik7CgogICAgICAgICAgICAgICAgY291dCA8PCBtYXgoZ2V0KGEsIGFuYyksIGdldChiLCBhbmMpKSA8PCAiIFxuIltpID09IHFdOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovKgoKKi8=