#include <bits/stdc++.h>
using namespace std;
#define all(x) x.begin(),x.end()
#define ll long long
#define endl '\n'
#define fi first
#define se second
const int N = 1e5 + 7;
bool visited[N];
int n, m, par[N][27], h[N];
int a[N], in[N], out[N], timer;
vector<int> adj[N];
ll node[N], node2[N];
void update(int idx, ll val, ll node[]) {
while(idx <= n) {
node[idx] += val;
idx += idx & -idx;
}
}
ll get(int idx, ll node[]) {
ll ans = 0;
while(idx > 0) {
ans += node[idx];
idx -= idx & -idx;
}
return ans;
}
void update2(int l, int r, ll val, ll node[]) {
update(l, val, node);
update(r + 1, -val, node);
}
void dfs(int u, int p) {
//cout << u << endl;
in[u] = ++timer;
for(auto v : adj[u]) if(v != p) {
h[v] = h[u] + 1;
par[v][0] = u;
for(int i = 1; i <= 20; i++)
par[v][i] = par[par[v][i - 1]][i - 1];
dfs(v, u);
ll val = max(abs(a[u] - a[v]), abs(a[u] + a[v]));
update2(in[v], out[v], val, node);
val = max(abs(a[v] - a[u]), abs(a[u] + a[v]));
update2(in[v], out[v], val, node2);
}
out[u] = timer;
}
int lca(int u, int v) {
if(h[u] < h[v]) swap(u, v);
int k = h[u] - h[v];
for(int i = 20; i >= 0; i--)
if((k >> i) & 1) u = par[u][i];
if(u == v) return u;
for(int i = 20; i >= 0; i--)
if(par[u][i] != par[v][i]) {
u = par[u][i];
v = par[v][i];
}
return par[u][0];
}
signed main() {
if (fopen("maze.inp", "r")) {
freopen("maze.inp", "r", stdin);
freopen("maze.out", "w", stdout);
}
if (fopen("vd.inp", "r")) {
freopen("vd.inp", "r", stdin);
freopen("vd.out", "w", stdout);
}
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin >> n >> m;
for(int i = 1; i <= n; i++) cin >> a[i];
for(int i = 1; i <= n - 1; i++) {
int u, v; cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, -1);
while(m--) {
int type; cin >> type;
if(type == 1) {
int v, c; cin >> v >> c;
if(par[v][0] != 0) {
int u = par[v][0];
ll val = max(abs(a[u] - a[v]), abs(a[u] + a[v]));
update2(in[v], out[v], -val, node);
val = max(abs(a[v] - a[u]), abs(a[u] + a[v]));
update2(in[v], out[v], -val, node2);
val = max(abs(a[u] - c), abs(a[u] + c));
update2(in[v], out[v], val, node);
val = max(abs(c - a[u]), abs(a[u] + c));
update2(in[v], out[v], val, node2);
for(auto vv : adj[v]) {
val = max(abs(c - a[vv]), abs(c + a[vv]));
update2(in[vv], out[vv], val, node);
val = max(abs(a[vv] - c), abs(c + a[vv]));
update2(in[vv], out[vv], val, node2);
val = max(abs(a[v] - a[vv]), abs(a[v] + a[vv]));
update2(in[vv], out[vv], -val, node);
val = max(abs(a[vv] - a[v]), abs(a[v] + a[vv]));
update2(in[vv], out[vv], -val, node2);
}
a[v] = c;
}
} else {
int u, v; cin >> u >> v;
int uv = lca(u, v);
cout << get(in[u], node2) + get(in[v], node) - get(uv, node) - get(uv, node2) << endl;
}
}
return 0;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CiNkZWZpbmUgYWxsKHgpIHguYmVnaW4oKSx4LmVuZCgpCiNkZWZpbmUgbGwgbG9uZyBsb25nCiNkZWZpbmUgZW5kbCAnXG4nCiNkZWZpbmUgZmkgZmlyc3QKI2RlZmluZSBzZSBzZWNvbmQKY29uc3QgaW50IE4gPSAxZTUgKyA3Owpib29sIHZpc2l0ZWRbTl07CmludCBuLCBtLCBwYXJbTl1bMjddLCBoW05dOwppbnQgYVtOXSwgaW5bTl0sIG91dFtOXSwgdGltZXI7CnZlY3RvcjxpbnQ+IGFkaltOXTsKbGwgbm9kZVtOXSwgbm9kZTJbTl07CnZvaWQgdXBkYXRlKGludCBpZHgsIGxsIHZhbCwgbGwgbm9kZVtdKSB7CiAgICB3aGlsZShpZHggPD0gbikgewogICAgICAgIG5vZGVbaWR4XSArPSB2YWw7CiAgICAgICAgaWR4ICs9IGlkeCAmIC1pZHg7CiAgICB9Cn0KbGwgZ2V0KGludCBpZHgsIGxsIG5vZGVbXSkgewogICAgbGwgYW5zID0gMDsKICAgIHdoaWxlKGlkeCA+IDApIHsKICAgICAgICBhbnMgKz0gbm9kZVtpZHhdOwogICAgICAgIGlkeCAtPSBpZHggJiAtaWR4OwogICAgfQogICAgcmV0dXJuIGFuczsKfQp2b2lkIHVwZGF0ZTIoaW50IGwsIGludCByLCBsbCB2YWwsIGxsIG5vZGVbXSkgewogICAgdXBkYXRlKGwsIHZhbCwgbm9kZSk7CiAgICB1cGRhdGUociArIDEsIC12YWwsIG5vZGUpOwp9CnZvaWQgZGZzKGludCB1LCBpbnQgcCkgewogICAgLy9jb3V0IDw8IHUgPDwgZW5kbDsKICAgIGluW3VdID0gKyt0aW1lcjsKICAgIGZvcihhdXRvIHYgOiBhZGpbdV0pIGlmKHYgIT0gcCkgewogICAgICAgIGhbdl0gPSBoW3VdICsgMTsKICAgICAgICBwYXJbdl1bMF0gPSB1OwogICAgICAgIGZvcihpbnQgaSA9IDE7IGkgPD0gMjA7IGkrKykKICAgICAgICAgICAgcGFyW3ZdW2ldID0gcGFyW3Bhclt2XVtpIC0gMV1dW2kgLSAxXTsKICAgICAgICBkZnModiwgdSk7CiAgICAgICAgbGwgdmFsID0gbWF4KGFicyhhW3VdIC0gYVt2XSksIGFicyhhW3VdICsgYVt2XSkpOwogICAgICAgIHVwZGF0ZTIoaW5bdl0sIG91dFt2XSwgdmFsLCBub2RlKTsKICAgICAgICB2YWwgPSBtYXgoYWJzKGFbdl0gLSBhW3VdKSwgYWJzKGFbdV0gKyBhW3ZdKSk7CiAgICAgICAgdXBkYXRlMihpblt2XSwgb3V0W3ZdLCB2YWwsIG5vZGUyKTsKICAgIH0KICAgIG91dFt1XSA9IHRpbWVyOwp9CmludCBsY2EoaW50IHUsIGludCB2KSB7CiAgICBpZihoW3VdIDwgaFt2XSkgc3dhcCh1LCB2KTsKICAgIGludCBrID0gaFt1XSAtIGhbdl07CiAgICBmb3IoaW50IGkgPSAyMDsgaSA+PSAwOyBpLS0pCiAgICAgICAgaWYoKGsgPj4gaSkgJiAxKSB1ID0gcGFyW3VdW2ldOwogICAgaWYodSA9PSB2KSByZXR1cm4gdTsKICAgIGZvcihpbnQgaSA9IDIwOyBpID49IDA7IGktLSkKICAgICAgICBpZihwYXJbdV1baV0gIT0gcGFyW3ZdW2ldKSB7CiAgICAgICAgICAgIHUgPSBwYXJbdV1baV07CiAgICAgICAgICAgIHYgPSBwYXJbdl1baV07CiAgICAgICAgfQogICAgcmV0dXJuIHBhclt1XVswXTsKfQpzaWduZWQgbWFpbigpIHsKICAgIGlmIChmb3BlbigibWF6ZS5pbnAiLCAiciIpKSB7CiAgICAgICAgZnJlb3BlbigibWF6ZS5pbnAiLCAiciIsIHN0ZGluKTsKICAgICAgICBmcmVvcGVuKCJtYXplLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGlmIChmb3BlbigidmQuaW5wIiwgInIiKSkgewogICAgICAgIGZyZW9wZW4oInZkLmlucCIsICJyIiwgc3RkaW4pOwogICAgICAgIGZyZW9wZW4oInZkLm91dCIsICJ3Iiwgc3Rkb3V0KTsKICAgIH0KICAgIGlvczo6c3luY193aXRoX3N0ZGlvKDApOyBjaW4udGllKDApOyBjb3V0LnRpZSgwKTsKICAgIGNpbiA+PiBuID4+IG07CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG47IGkrKykgY2luID4+IGFbaV07CiAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG4gLSAxOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICBhZGpbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFkalt2XS5wdXNoX2JhY2sodSk7CiAgICB9CiAgICBkZnMoMSwgLTEpOwogICAgd2hpbGUobS0tKSB7CiAgICAgICAgaW50IHR5cGU7IGNpbiA+PiB0eXBlOwogICAgICAgIGlmKHR5cGUgPT0gMSkgewogICAgICAgICAgICBpbnQgdiwgYzsgY2luID4+IHYgPj4gYzsKICAgICAgICAgICAgaWYocGFyW3ZdWzBdICE9IDApIHsKICAgICAgICAgICAgICAgIGludCB1ID0gcGFyW3ZdWzBdOwogICAgICAgICAgICAgICAgbGwgdmFsID0gbWF4KGFicyhhW3VdIC0gYVt2XSksIGFicyhhW3VdICsgYVt2XSkpOwogICAgICAgICAgICAgICAgdXBkYXRlMihpblt2XSwgb3V0W3ZdLCAtdmFsLCBub2RlKTsKCiAgICAgICAgICAgICAgICB2YWwgPSBtYXgoYWJzKGFbdl0gLSBhW3VdKSwgYWJzKGFbdV0gKyBhW3ZdKSk7CiAgICAgICAgICAgICAgICB1cGRhdGUyKGluW3ZdLCBvdXRbdl0sIC12YWwsIG5vZGUyKTsKICAgICAgICAgICAgICAgIHZhbCA9IG1heChhYnMoYVt1XSAtIGMpLCBhYnMoYVt1XSArIGMpKTsKICAgICAgICAgICAgICAgIHVwZGF0ZTIoaW5bdl0sIG91dFt2XSwgdmFsLCBub2RlKTsKCiAgICAgICAgICAgICAgICB2YWwgPSBtYXgoYWJzKGMgLSBhW3VdKSwgYWJzKGFbdV0gKyBjKSk7CiAgICAgICAgICAgICAgICB1cGRhdGUyKGluW3ZdLCBvdXRbdl0sIHZhbCwgbm9kZTIpOwogICAgICAgICAgICAgICAgZm9yKGF1dG8gdnYgOiBhZGpbdl0pIHsKICAgICAgICAgICAgICAgICAgICB2YWwgPSBtYXgoYWJzKGMgLSBhW3Z2XSksIGFicyhjICsgYVt2dl0pKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGUyKGluW3Z2XSwgb3V0W3Z2XSwgdmFsLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICB2YWwgPSBtYXgoYWJzKGFbdnZdIC0gYyksIGFicyhjICsgYVt2dl0pKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGUyKGluW3Z2XSwgb3V0W3Z2XSwgdmFsLCBub2RlMik7CgogICAgICAgICAgICAgICAgICAgIHZhbCA9IG1heChhYnMoYVt2XSAtIGFbdnZdKSwgYWJzKGFbdl0gKyBhW3Z2XSkpOwogICAgICAgICAgICAgICAgICAgIHVwZGF0ZTIoaW5bdnZdLCBvdXRbdnZdLCAtdmFsLCBub2RlKTsKICAgICAgICAgICAgICAgICAgICB2YWwgPSBtYXgoYWJzKGFbdnZdIC0gYVt2XSksIGFicyhhW3ZdICsgYVt2dl0pKTsKICAgICAgICAgICAgICAgICAgICB1cGRhdGUyKGluW3Z2XSwgb3V0W3Z2XSwgLXZhbCwgbm9kZTIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYVt2XSA9IGM7CiAgICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpbnQgdSwgdjsgY2luID4+IHUgPj4gdjsKICAgICAgICAgICAgaW50IHV2ID0gbGNhKHUsIHYpOwogICAgICAgICAgICBjb3V0IDw8IGdldChpblt1XSwgbm9kZTIpICsgZ2V0KGluW3ZdLCBub2RlKSAtIGdldCh1diwgbm9kZSkgLSBnZXQodXYsIG5vZGUyKSA8PCBlbmRsOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAwOwp9Cg==