#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double dou;
#define pii pair<int, int>
const int maxn = 1e5+7;
int num[maxn], n, q;
vector<int> a[maxn];
int trsz = 1;
vector<int> tr(maxn*3, 0);
int sz[maxn], heavy[maxn], head[maxn], par[maxn], pos[maxn], height[maxn];
void dfs_sz(int u, int p) {
sz[u] = 1;
heavy[u] = 0;
for (int v : a[u]) {
if (v == p) continue;
par[v] = u;
height[v] = height[u] + 1;
dfs_sz(v, u);
sz[u] += sz[v];
if (sz[heavy[u]] < sz[v]) heavy[u] = v;
}
}
int hld_timer = 0;
void dfs_hld(int u, int p, int trailing_head){
pos[u] = ++hld_timer;
head[u] = trailing_head;
tr[pos[u] + trsz-1] = num[u];
if (heavy[u]){
dfs_hld(heavy[u], u, trailing_head);
for (int v : a[u]){
if (v == p || v == heavy[u]) continue;
dfs_hld(v, u, v);
}
}
}
void update(int k, int x){
k = k + trsz-1;
tr[k] = x;
k /= 2;
while (k > 0) {
tr[k] = tr[k*2]^tr[k*2+1];
k /= 2;
}
}
int query(int l, int r){
l = l + trsz - 1;
r = r + trsz - 1;
if (l > r) swap(l, r);
int ans = 0;
while (l <= r){
if (l % 2 == 1) ans ^= tr[l++];
if (r % 2 == 0) ans ^= tr[r--];
l /= 2; r /= 2;
}
return ans;
}
int lca(int u, int v){
int ans = 0;
while (head[u] != head[v]) {
if (height[head[u]] < height[head[v]]) swap(u, v);
ans ^= query(pos[head[u]], pos[u]);
u = par[head[u]];
}
ans ^= query(pos[u], pos[v]);
return ans;
}
int main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
if (fopen("cowland.in", "r")){
freopen("cowland.in", "r", stdin);
freopen("cowland.out", "w", stdout);
}
cin >> n >> q;
while (trsz < n) trsz *= 2;
for (int i = 1; i <= n; i++) {
cin >> num[i];
}
for (int i = 1; i < n; i++) {
int u, v;
cin >> u >> v;
a[u].push_back(v);
a[v].push_back(u);
}
height[1] = 1;
par[1] = 0;
sz[0] = 0;
dfs_sz(1, 0);
dfs_hld(1, 0, 1);
for (int i = trsz-1; i > 0; i--) {
tr[i] = tr[i*2] ^ tr[i*2+1];
}
while (q--){
int type;
cin >> type;
if (type == 1) {
int k, x;
cin >> k >> x;
update(pos[k], x);
}
else {
int u, v;
cin >> u >> v;
cout << lca(u, v) << "\n";
}
}
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgZG91OwojZGVmaW5lIHBpaSBwYWlyPGludCwgaW50PgoKY29uc3QgaW50IG1heG4gPSAxZTUrNzsKaW50IG51bVttYXhuXSwgbiwgcTsKdmVjdG9yPGludD4gYVttYXhuXTsKaW50IHRyc3ogPSAxOwp2ZWN0b3I8aW50PiB0cihtYXhuKjMsIDApOwppbnQgc3pbbWF4bl0sIGhlYXZ5W21heG5dLCBoZWFkW21heG5dLCBwYXJbbWF4bl0sIHBvc1ttYXhuXSwgaGVpZ2h0W21heG5dOwp2b2lkIGRmc19zeihpbnQgdSwgaW50IHApIHsKICAgIHN6W3VdID0gMTsKICAgIGhlYXZ5W3VdID0gMDsKICAgIGZvciAoaW50IHYgOiBhW3VdKSB7CiAgICAgICAgaWYgKHYgPT0gcCkgY29udGludWU7CiAgICAgICAgcGFyW3ZdID0gdTsKICAgICAgICBoZWlnaHRbdl0gPSBoZWlnaHRbdV0gKyAxOwogICAgICAgIGRmc19zeih2LCB1KTsKICAgICAgICBzelt1XSArPSBzelt2XTsKICAgICAgICBpZiAoc3pbaGVhdnlbdV1dIDwgc3pbdl0pIGhlYXZ5W3VdID0gdjsKICAgIH0KfQoKaW50IGhsZF90aW1lciA9IDA7CnZvaWQgZGZzX2hsZChpbnQgdSwgaW50IHAsIGludCB0cmFpbGluZ19oZWFkKXsKICAgIHBvc1t1XSA9ICsraGxkX3RpbWVyOwogICAgaGVhZFt1XSA9IHRyYWlsaW5nX2hlYWQ7CiAgICB0cltwb3NbdV0gKyB0cnN6LTFdID0gbnVtW3VdOwogICAgaWYgKGhlYXZ5W3VdKXsKICAgICAgICBkZnNfaGxkKGhlYXZ5W3VdLCB1LCB0cmFpbGluZ19oZWFkKTsKICAgICAgICBmb3IgKGludCB2IDogYVt1XSl7CiAgICAgICAgICAgIGlmICh2ID09IHAgfHwgdiA9PSBoZWF2eVt1XSkgY29udGludWU7CiAgICAgICAgICAgIGRmc19obGQodiwgdSwgdik7CiAgICAgICAgfQogICAgfQp9Cgp2b2lkIHVwZGF0ZShpbnQgaywgaW50IHgpewogICAgayA9IGsgKyB0cnN6LTE7CiAgICB0cltrXSA9IHg7CiAgICBrIC89IDI7CiAgICB3aGlsZSAoayA+IDApIHsKICAgICAgICB0cltrXSA9IHRyW2sqMl1edHJbayoyKzFdOwogICAgICAgIGsgLz0gMjsKICAgIH0KfQoKaW50IHF1ZXJ5KGludCBsLCBpbnQgcil7CiAgICBsID0gbCArIHRyc3ogLSAxOwogICAgciA9IHIgKyB0cnN6IC0gMTsKICAgIGlmIChsID4gcikgc3dhcChsLCByKTsKICAgIGludCBhbnMgPSAwOwogICAgd2hpbGUgKGwgPD0gcil7CiAgICAgICAgaWYgKGwgJSAyID09IDEpIGFucyBePSB0cltsKytdOwogICAgICAgIGlmIChyICUgMiA9PSAwKSBhbnMgXj0gdHJbci0tXTsKICAgICAgICBsIC89IDI7IHIgLz0gMjsKICAgIH0KICAgIHJldHVybiBhbnM7Cn0KCmludCBsY2EoaW50IHUsIGludCB2KXsKICAgIGludCBhbnMgPSAwOwogICAgd2hpbGUgKGhlYWRbdV0gIT0gaGVhZFt2XSkgewogICAgICAgIGlmIChoZWlnaHRbaGVhZFt1XV0gPCBoZWlnaHRbaGVhZFt2XV0pIHN3YXAodSwgdik7CiAgICAgICAgYW5zIF49IHF1ZXJ5KHBvc1toZWFkW3VdXSwgcG9zW3VdKTsKICAgICAgICB1ID0gcGFyW2hlYWRbdV1dOwogICAgfQogICAgYW5zIF49IHF1ZXJ5KHBvc1t1XSwgcG9zW3ZdKTsKICAgIHJldHVybiBhbnM7Cn0KCmludCBtYWluKCkgewogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKTsKICAgIGNpbi50aWUoMCk7CiAgICBpZiAoZm9wZW4oImNvd2xhbmQuaW4iLCAiciIpKXsKICAgICAgICBmcmVvcGVuKCJjb3dsYW5kLmluIiwgInIiLCBzdGRpbik7CiAgICAgICAgZnJlb3BlbigiY293bGFuZC5vdXQiLCAidyIsIHN0ZG91dCk7CiAgICB9CiAgICBjaW4gPj4gbiA+PiBxOwogICAgd2hpbGUgKHRyc3ogPCBuKSB0cnN6ICo9IDI7CiAgICBmb3IgKGludCBpID0gMTsgaSA8PSBuOyBpKyspIHsKICAgICAgICBjaW4gPj4gbnVtW2ldOwogICAgfQogICAgZm9yIChpbnQgaSA9IDE7IGkgPCBuOyBpKyspIHsKICAgICAgICBpbnQgdSwgdjsKICAgICAgICBjaW4gPj4gdSA+PiB2OwogICAgICAgIGFbdV0ucHVzaF9iYWNrKHYpOwogICAgICAgIGFbdl0ucHVzaF9iYWNrKHUpOwogICAgfQogICAgaGVpZ2h0WzFdID0gMTsKICAgIHBhclsxXSA9IDA7CiAgICBzelswXSA9IDA7CiAgICBkZnNfc3ooMSwgMCk7CiAgICBkZnNfaGxkKDEsIDAsIDEpOwogICAgZm9yIChpbnQgaSA9IHRyc3otMTsgaSA+IDA7IGktLSkgewogICAgICAgIHRyW2ldID0gdHJbaSoyXSBeIHRyW2kqMisxXTsKICAgIH0KICAgIHdoaWxlIChxLS0pewogICAgICAgIGludCB0eXBlOwogICAgICAgIGNpbiA+PiB0eXBlOwogICAgICAgIGlmICh0eXBlID09IDEpIHsKICAgICAgICAgICAgaW50IGssIHg7CiAgICAgICAgICAgIGNpbiA+PiBrID4+IHg7CiAgICAgICAgICAgIHVwZGF0ZShwb3Nba10sIHgpOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgaW50IHUsIHY7CiAgICAgICAgICAgIGNpbiA+PiB1ID4+IHY7CiAgICAgICAgICAgIGNvdXQgPDwgbGNhKHUsIHYpIDw8ICJcbiI7CiAgICAgICAgfQogICAgfQp9Cg==