#include <bits/stdc++.h>
using namespace std ;
#define ll long long
#define str string
#define fir first
#define sec second
#define FOR(i,a,b) for (int i = (a) ; i <= (b) ; i++)
#define FORD(i,a,b) for (int i = (a) ; i >= (b) ; i--)
#define ALL(x) (x).begin() , (x).end()
#define pb push_back
const int maxn = 1e5 ;
int a[maxn + 3 ] ;
int n , q ;
vector < int > G[maxn + 3 ] ;
void dfs (int u , int par , int x ) {
a[u] ^= x ;
// cout << "u" << u << ' ' << a[u] << ' '<< x << '\n';
for (auto v : G[u]){
if ( v == par ) continue ;
dfs ( v , u , x ) ;
}
}
int Par[maxn + 3] ;
bool vt[maxn +3 ] ;
void dfs_tim_cha( int u , int par ) {
Par[u] = par ;
for (auto v : G[u]){
if ( v == par ) continue ;
dfs_tim_cha ( v , u ) ;
}
}
int get_bfs (int st , int x ){
FOR ( i , 1 , n ) vt[i] = 0 ;
int ans = 0 ;
queue < pair < int , int > > q ;
q.push ( { a[st] , st }) ;
vt[st] = 1 ;
// for (int i = 1 ; i <= n ; i ++ ) cout << a[i] << ' ' ;
// cout << '\n' ;
while ( q.size()){
auto [ du , u ] = q.front() ;
q.pop() ;
if ( u == x ) {
return du ;
}
for (auto v : G[u]){
if ( !vt[v]){
vt[v] = 1 ;
int new_du = du ^ a[v] ;
q.push ( { new_du , v }) ;
}
}
}
}
#define name "XORTREE"
void sub1(){
dfs_tim_cha(1 , 1 ) ;
while ( q -- ){
int pl , u , v ; cin >> pl >> u >> v ;
if ( pl == 1 ) {
dfs ( u , Par[u] , v ) ;
}
else cout << get_bfs ( u , v ) << '\n' ;
}
}
int in[maxn + 3 ] , ou[maxn + 3 ] ;
int cnt = 1 ;
const int LOG = 18 ;
int up[maxn + 3 ] [LOG + 3 ] ;
int lazy[maxn * 8 + 3 ] ;
int s[maxn * 8 + 3 ] ;
void fix (int id ,int l , int r ) {
if ( ( r - l + 1 ) & 1 ) s[id] ^= lazy[id] ;
if ( l != r ) {
lazy[id * 2 + 1 ] ^= lazy[id] ;
lazy[id * 2 ] ^= lazy[id] ;
}
lazy[id] = 0 ;
}
void update ( int id , int l , int r , int u , int v , int val ){
fix ( id , l , r ) ;
if ( u > r || l > v ) return ;
if ( u <= l && r <= v ) {
lazy[id] = val ;
fix ( id , l , r ) ;
return ;
}
int m = ( l + r ) >> 1ll ;
update( id * 2 , l , m , u , v , val ) ;
update( id * 2 + 1 , m + 1 , r , u , v , val ) ;
s[id] = s[id *2 ] ^ s[id * 2 + 1] ;
}
int get ( int id , int l , int r , int u , int v ){
// fix ( id , l , r ) ;
if ( u > r || l > v ) return 0;
fix ( id , l , r ) ;
if ( u <= l && r <= v ) {
return s[id] ;
// return ;
}
int m = ( l + r ) >> 1ll ;
int one = get ( id * 2 , l , m , u , v ) ;
int two = get ( id * 2 + 1 , m + 1 , r , u , v ) ;
return one ^ two ;
}
int h[maxn + 3 ] ;
void dfs_sub2 (int u , int par ) {
in[u] = cnt ++ ;
for (auto v : G[u]){
if ( v == par ) continue ;
h[v] = h[u] + 1 ;
up[v][0] = u ;
for (int i = 1 ; i <= LOG ; i ++ ) {
up[v][i] = up[up[v][i-1]][i-1] ;
}
dfs_sub2( v , u ) ;
}
ou[u] = cnt ++ ;
}
int lca (int u , int v ) {
if ( h[u] < h[v] ) swap ( u , v ) ;
int k = h[u] - h[v] ;
for (int i = 0 ; ( 1 << i ) <= k ; i ++ ) {
if ( ( k >> i ) & 1 ) u = up[u][i] ;
}
if ( u == v ) return u ;
for ( int i = LOG ; i >= 0 ; i-- ) {
if (up[u][i] != up[v][i]) {
u = up[u][i] ;
v = up[v][i] ;
}
}
return up[u][0] ;
}
void sub2() {
dfs_sub2( 1 , 1 ) ;
FOR ( u , 1 , n ) {
int random_c = 0 ;
update ( 1 , 1 , cnt , in[u] , in[u] , a[u] ) ;
update ( 1 , 1 , cnt , ou[u] , ou[u] , a[u] ) ;
}
while ( q -- ) {
int pl , u , v ; cin >> pl >> u >> v ;
if ( pl == 1 ) {
update ( 1 , 1 , cnt , in[u] , ou[u] , v ) ;
}
else {
int lcaa = lca ( u , v ) ;
if ( lcaa == u ){
cout << (get ( 1 , 1 , cnt , in[u] , in[v] )) << '\n' ;
continue ;
}
cout << (get ( 1 , 1 , cnt , in[lcaa] , in[u] ) ^ get ( 1 , 1 , cnt , in[lcaa] , in[v] ) ^ get ( 1 , 1 , cnt , in[lcaa] , in[lcaa] )) << '\n' ;
}
}
}
int main(){
ios_base::sync_with_stdio(0) ;
cin.tie(0) ; cout.tie(0) ;
if(fopen(name".inp" , "r")){
freopen(name".inp" , "r" , stdin ) ;
freopen(name".out" , "w" , stdout ) ;
}
cin >> n >> q ;
FOR ( i , 1 , n ) cin >> a[i] ;
FOR ( i , 2 , n ) {
int u , v ; cin >> u >> v ;
G[u].pb ( v ) ;
G[v].pb ( u ) ;
}
sub2() ;
}
I2luY2x1ZGUgPGJpdHMvc3RkYysrLmg+Cgp1c2luZyBuYW1lc3BhY2Ugc3RkIDsKI2RlZmluZSBsbCBsb25nIGxvbmcKI2RlZmluZSBzdHIgc3RyaW5nCiNkZWZpbmUgZmlyIGZpcnN0CiNkZWZpbmUgc2VjIHNlY29uZAojZGVmaW5lIEZPUihpLGEsYikgZm9yIChpbnQgaSA9IChhKSA7IGkgPD0gKGIpIDsgaSsrKQojZGVmaW5lIEZPUkQoaSxhLGIpIGZvciAoaW50IGkgPSAoYSkgOyBpID49IChiKSA7IGktLSkKI2RlZmluZSBBTEwoeCkgKHgpLmJlZ2luKCkgLCAoeCkuZW5kKCkKI2RlZmluZSBwYiBwdXNoX2JhY2sKY29uc3QgaW50IG1heG4gPSAxZTUgOwoKaW50IGFbbWF4biArIDMgXSA7ICAKaW50IG4gLCBxIDsKdmVjdG9yIDwgaW50ID4gR1ttYXhuICsgMyBdIDsKdm9pZCBkZnMgKGludCB1ICwgaW50IHBhciAsIGludCB4ICkgewogICAgYVt1XSBePSB4IDsKLy8gICAgY291dCA8PCAidSIgPDwgdSA8PCAnICcgPDwgYVt1XSA8PCAnICc8PCB4IDw8ICdcbic7CiAgICBmb3IgKGF1dG8gdiA6IEdbdV0pewogICAgICAgIGlmICggdiA9PSBwYXIgKSBjb250aW51ZSA7CiAgICAgICAgZGZzICggdiAsIHUgLCB4ICkgOwogICAgfQp9CmludCBQYXJbbWF4biArIDNdIDsKYm9vbCB2dFttYXhuICszIF0gOwp2b2lkIGRmc190aW1fY2hhKCBpbnQgdSAsIGludCBwYXIgKSB7CiAgICBQYXJbdV0gPSBwYXIgOwogICAgZm9yIChhdXRvIHYgOiBHW3VdKXsKICAgICAgICBpZiAoIHYgPT0gcGFyICkgY29udGludWUgOwogICAgICAgIGRmc190aW1fY2hhICggdiAsIHUgKSA7CiAgICB9Cn0KaW50IGdldF9iZnMgKGludCBzdCAsIGludCB4ICl7CiAgICBGT1IgKCBpICwgMSAsIG4gKSB2dFtpXSA9IDAgOwogICAgaW50IGFucyA9IDAgOwogICAgcXVldWUgPCBwYWlyIDwgaW50ICwgaW50ID4gID4gcSA7CiAgICBxLnB1c2ggKCB7IGFbc3RdICwgc3QgfSkgOwogICAgdnRbc3RdID0gMSA7Ci8vICAgIGZvciAoaW50IGkgPSAxIDsgaSA8PSBuIDsgaSArKyApIGNvdXQgPDwgYVtpXSA8PCAnICcgOwovLyAgICBjb3V0IDw8ICdcbicgOwogICAgd2hpbGUgKCBxLnNpemUoKSl7CiAgICAgICAgYXV0byBbIGR1ICwgdSBdID0gcS5mcm9udCgpIDsKICAgICAgICBxLnBvcCgpIDsKCiAgICAgICAgaWYgKCB1ID09IHggKSB7CiAgICAgICAgICAgIHJldHVybiBkdSA7CgogICAgICAgIH0KICAgICAgICBmb3IgKGF1dG8gdiA6IEdbdV0pewogICAgICAgICAgICBpZiAoICF2dFt2XSl7CiAgICAgICAgICAgICAgICB2dFt2XSA9IDEgOwogICAgICAgICAgICAgICAgaW50IG5ld19kdSA9IGR1IF4gYVt2XSA7CiAgICAgICAgICAgICAgICBxLnB1c2ggKCB7IG5ld19kdSAsIHYgfSkgOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CiNkZWZpbmUgbmFtZSAiWE9SVFJFRSIKdm9pZCBzdWIxKCl7CiAgICBkZnNfdGltX2NoYSgxICwgMSApIDsKICAgIHdoaWxlICggcSAtLSApewogICAgICAgIGludCBwbCAsIHUgLCB2IDsgY2luID4+IHBsID4+IHUgPj4gdiA7CiAgICAgICAgaWYgKCBwbCA9PSAxICkgewogICAgICAgICAgICBkZnMgKCB1ICwgUGFyW3VdICwgdiApIDsKICAgICAgICB9CiAgICAgICAgZWxzZSBjb3V0IDw8IGdldF9iZnMgKCB1ICwgdiApIDw8ICdcbicgOwogICAgfQp9CmludCBpblttYXhuICsgMyBdICwgb3VbbWF4biArIDMgXSA7CmludCBjbnQgPSAxIDsKY29uc3QgaW50IExPRyA9IDE4IDsKaW50IHVwW21heG4gKyAzIF0gW0xPRyArIDMgXSA7CmludCBsYXp5W21heG4gKiA4ICsgMyBdIDsKaW50IHNbbWF4biAqIDggKyAzIF0gOwp2b2lkIGZpeCAoaW50IGlkICxpbnQgbCAsIGludCByICkgewogICAgaWYgKCAoIHIgLSBsICsgMSApICYgMSApIHNbaWRdIF49IGxhenlbaWRdIDsKCiAgICBpZiAoIGwgIT0gciApIHsKICAgICAgICBsYXp5W2lkICogMiArIDEgXSBePSBsYXp5W2lkXSA7CiAgICAgICAgbGF6eVtpZCAqIDIgXSBePSBsYXp5W2lkXSA7CiAgICB9CiAgICBsYXp5W2lkXSA9IDAgOwp9CnZvaWQgdXBkYXRlICggaW50IGlkICwgaW50IGwgLCBpbnQgciAsIGludCB1ICwgaW50IHYgLCBpbnQgdmFsICl7CiAgICBmaXggKCBpZCAsIGwgLCByICkgOwogICAgaWYgKCB1ID4gciB8fCBsID4gdiApIHJldHVybiAgOwogICAgaWYgKCB1IDw9IGwgJiYgciA8PSB2ICkgewogICAgICAgIGxhenlbaWRdID0gdmFsIDsKICAgICAgICBmaXggKCBpZCAsIGwgLCByICkgOwogICAgICAgIHJldHVybiA7CiAgICB9CiAgICBpbnQgbSA9ICggbCArIHIgKSA+PiAxbGwgOwogICAgdXBkYXRlKCBpZCAqIDIgLCBsICwgbSAsIHUgLCB2ICwgdmFsICkgOwogICAgdXBkYXRlKCBpZCAqIDIgKyAxICwgbSArIDEgLCByICwgdSAsIHYgLCB2YWwgKSA7CiAgICBzW2lkXSA9IHNbaWQgKjIgXSBeIHNbaWQgKiAyICsgMV0gOwp9CmludCBnZXQgKCBpbnQgaWQgLCBpbnQgbCAsIGludCByICwgaW50IHUgLCBpbnQgdiApewovLyAgICBmaXggKCBpZCAsIGwgLCByICkgOwogICAgaWYgKCB1ID4gciB8fCBsID4gdiApIHJldHVybiAwOwogICAgZml4ICggaWQgLCBsICwgciApIDsKICAgIGlmICggdSA8PSBsICYmIHIgPD0gdiApIHsKICAgICAgICByZXR1cm4gc1tpZF0gOwovLyAgICAgICAgcmV0dXJuIDsKICAgIH0KICAgIGludCBtID0gKCBsICsgciApID4+IDFsbCA7CiAgICBpbnQgb25lID0gZ2V0ICggaWQgKiAyICwgbCAsIG0gLCB1ICwgdiApIDsKICAgIGludCB0d28gPSBnZXQgKCBpZCAqIDIgKyAxICwgbSArIDEgICwgciAsIHUgLCB2ICkgOwogICAgcmV0dXJuIG9uZSBeIHR3byA7Cn0KaW50IGhbbWF4biArIDMgXSA7CnZvaWQgZGZzX3N1YjIgKGludCB1ICwgaW50IHBhciApIHsKICAgIGluW3VdID0gY250ICsrIDsKICAgIGZvciAoYXV0byB2IDogR1t1XSl7CiAgICAgICAgaWYgKCB2ID09IHBhciApIGNvbnRpbnVlIDsKICAgICAgICBoW3ZdID0gaFt1XSArIDEgOwogICAgICAgIHVwW3ZdWzBdID0gdSA7CiAgICAgICAgZm9yIChpbnQgaSA9IDEgOyBpIDw9IExPRyA7IGkgKysgKSB7CiAgICAgICAgICAgIHVwW3ZdW2ldID0gdXBbdXBbdl1baS0xXV1baS0xXSA7CiAgICAgICAgfQogICAgICAgIGRmc19zdWIyKCB2ICwgdSApIDsKICAgIH0KICAgIG91W3VdID0gY250ICsrIDsKfQppbnQgbGNhIChpbnQgdSAsIGludCB2ICkgewogICAgaWYgKCBoW3VdIDwgaFt2XSApIHN3YXAgKCB1ICwgdiApIDsKICAgIGludCBrID0gaFt1XSAtIGhbdl0gOwogICAgZm9yIChpbnQgaSA9IDAgOyAoIDEgPDwgaSApIDw9IGsgOyBpICsrICkgewogICAgICAgIGlmICggKCBrID4+IGkgKSAmIDEgKSB1ID0gdXBbdV1baV0gOwogICAgfQogICAgaWYgKCB1ID09IHYgKSByZXR1cm4gdSA7CiAgICBmb3IgKCBpbnQgaSA9IExPRyA7IGkgPj0gMCA7IGktLSApIHsKCiAgICAgICAgaWYgKHVwW3VdW2ldICE9IHVwW3ZdW2ldKSB7CiAgICAgICAgICAgIHUgPSB1cFt1XVtpXSA7CiAgICAgICAgICAgIHYgPSB1cFt2XVtpXSA7CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHVwW3VdWzBdIDsKfQp2b2lkIHN1YjIoKSB7CiAgICBkZnNfc3ViMiggMSAsIDEgKSA7CgogICAgRk9SICggdSAsIDEgLCBuICkgewogICAgICAgIGludCByYW5kb21fYyA9IDAgOwogICAgICAgIHVwZGF0ZSAoIDEgLCAxICwgY250ICwgaW5bdV0gLCBpblt1XSAsIGFbdV0gKSA7CiAgICAgICAgdXBkYXRlICggMSAsIDEgLCBjbnQgLCBvdVt1XSAsIG91W3VdICwgYVt1XSApIDsKICAgIH0KICAgIHdoaWxlICggcSAtLSApIHsKICAgICAgICBpbnQgcGwgLCB1ICwgdiA7IGNpbiA+PiBwbCA+PiB1ID4+IHYgOwogICAgICAgIGlmICggcGwgPT0gMSApIHsKICAgICAgICAgICAgdXBkYXRlICggMSAsIDEgLCBjbnQgLCBpblt1XSAsIG91W3VdICwgdiApIDsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgIGludCBsY2FhID0gbGNhICggdSAsIHYgKSA7CiAgICAgICAgICAgIGlmICggbGNhYSA9PSB1ICl7CiAgICAgICAgICAgICAgICBjb3V0IDw8IChnZXQgKCAxICwgMSAsIGNudCAsIGluW3VdICwgaW5bdl0gKSkgPDwgJ1xuJyA7CiAgICAgICAgICAgICAgICBjb250aW51ZSA7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY291dCA8PCAoZ2V0ICggMSAsIDEgLCBjbnQgLCBpbltsY2FhXSAsIGluW3VdICkgXiBnZXQgKCAxICwgMSAsIGNudCAsIGluW2xjYWFdICwgaW5bdl0gKSBeIGdldCAoIDEgLCAxICwgY250ICwgaW5bbGNhYV0gLCBpbltsY2FhXSApKSA8PCAnXG4nIDsKCiAgICAgICAgfQogICAgfQp9CmludCBtYWluKCl7CgogICAgaW9zX2Jhc2U6OnN5bmNfd2l0aF9zdGRpbygwKSA7CiAgICBjaW4udGllKDApIDsgY291dC50aWUoMCkgOwogICAgaWYoZm9wZW4obmFtZSIuaW5wIiAsICJyIikpewogICAgICAgIGZyZW9wZW4obmFtZSIuaW5wIiAsICJyIiAsIHN0ZGluICkgOwogICAgICAgIGZyZW9wZW4obmFtZSIub3V0IiAsICJ3IiAsIHN0ZG91dCApIDsKICAgIH0KICAgIGNpbiA+PiBuID4+IHEgOwoKICAgIEZPUiAoIGkgLCAxICwgbiApIGNpbiA+PiBhW2ldIDsKICAgIEZPUiAoIGkgLCAyICwgbiApIHsKICAgICAgICBpbnQgdSAsIHYgOyBjaW4gPj4gdSA+PiB2IDsKICAgICAgICBHW3VdLnBiICggdiApIDsKICAgICAgICBHW3ZdLnBiICggdSApIDsKICAgIH0KICAgIHN1YjIoKSA7Cn0K