// O(n*log(n)*log(MAX) + q*log(MAX))
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned long long ull;
typedef long double ld;
const int maxn = 200005;
const int lgn = 18;
const int depth = 20;
struct Node{
int l, r, id;
};
Node trie[maxn*lgn*depth];
vector<int> g[maxn];
int sz[maxn], root[maxn], val[maxn], st[maxn], en[maxn], vert[2*maxn];
int ptr, tptr;
void dfs(int v, int p){
sz[v] = 1;
vert[tptr] = v;
st[v] = tptr++;
for(auto u : g[v]){
if(u != p){
dfs(u, v);
sz[v] += sz[u];
}
}
vert[tptr] = v;
en[v] = tptr++;
}
void clear(int v){
trie[v].l = trie[v].r = trie[v].id = 0;
}
int update(int v, int k, int id){
clear(ptr);
int nv = ptr++;
trie[nv] = trie[v];
int ret = nv;
for(int i = depth - 1; i >= 0; i--){
clear(ptr);
if((k>>i)&1){
trie[nv].r = ptr++;
trie[trie[nv].r] = trie[trie[v].r];
nv = trie[nv].r;
v = trie[v].r;
}else{
trie[nv].l = ptr++;
trie[trie[nv].l] = trie[trie[v].l];
nv = trie[nv].l;
v = trie[v].l;
}
}
if(!trie[nv].id)trie[nv].id = id;
else trie[nv].id = min(trie[nv].id, id);
return ret;
}
int query(int v, int k){
for(int i = depth - 1; i >= 0; i--){
if((k>>i)&1){
if(trie[v].l)v = trie[v].l;
else v = trie[v].r;
}else{
if(trie[v].r)v = trie[v].r;
else v = trie[v].l;
}
}
return trie[v].id;
}
void createRoot(int v, int p){
int bg = -1;
for(auto u : g[v]){
if(u != p && (bg == -1 || sz[bg] < sz[u]))bg = u;
}
for(auto u : g[v]){
if(u != p)createRoot(u, v);
}
root[v] = (bg == -1)?0:root[bg];
root[v] = update(root[v], val[v], v);
for(auto u : g[v]){
if(u == p || u == bg)continue;
for(int i = st[u]; i < en[u]; i++){
int w = vert[i];
if(st[w] == i){
root[v] = update(root[v], val[w], w);
}
}
}
}
void solve(){
int n, q, u, v, k;
cin>>n>>q;
for(int i = 1; i <= n; i++){
cin>>val[i];
g[i].clear();
}
for(int i = 1; i < n; i++){
cin>>u>>v;
g[u].push_back(v);
g[v].push_back(u);
}
dfs(1, -1);
ptr = tptr = 1;
trie[0].l = trie[0].r = trie[0].id = 0;
createRoot(1, -1);
int last_answer = 0, last_node = 0;
while(q--){
cin>>v>>k;
v ^= last_node;
k ^= last_answer;
last_node = query(root[v], k);
last_answer = val[last_node]^k;
cout<<last_node<<" "<<last_answer<<'\n';
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
int t;
cin>>t;
while(t--)solve();
}
Ly8gTyhuKmxvZyhuKSpsb2coTUFYKSArIHEqbG9nKE1BWCkpCgojaW5jbHVkZSA8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCnR5cGVkZWYgbG9uZyBsb25nIGxsOwp0eXBlZGVmIHVuc2lnbmVkIGxvbmcgbG9uZyB1bGw7CnR5cGVkZWYgbG9uZyBkb3VibGUgbGQ7Cgpjb25zdCBpbnQgbWF4biA9IDIwMDAwNTsKY29uc3QgaW50IGxnbiA9IDE4Owpjb25zdCBpbnQgZGVwdGggPSAyMDsKCnN0cnVjdCBOb2RlewogICAgaW50IGwsIHIsIGlkOwp9OwoKTm9kZSB0cmllW21heG4qbGduKmRlcHRoXTsKdmVjdG9yPGludD4gZ1ttYXhuXTsKaW50IHN6W21heG5dLCByb290W21heG5dLCB2YWxbbWF4bl0sIHN0W21heG5dLCBlblttYXhuXSwgdmVydFsyKm1heG5dOwppbnQgcHRyLCB0cHRyOwoKdm9pZCBkZnMoaW50IHYsIGludCBwKXsKICAgIHN6W3ZdID0gMTsKICAgIHZlcnRbdHB0cl0gPSB2OwogICAgc3Rbdl0gPSB0cHRyKys7CiAgICBmb3IoYXV0byB1IDogZ1t2XSl7CiAgICAgICAgaWYodSAhPSBwKXsKICAgICAgICAgICAgZGZzKHUsIHYpOwogICAgICAgICAgICBzelt2XSArPSBzelt1XTsKICAgICAgICB9CiAgICB9CiAgICB2ZXJ0W3RwdHJdID0gdjsKICAgIGVuW3ZdID0gdHB0cisrOwp9Cgp2b2lkIGNsZWFyKGludCB2KXsKICAgIHRyaWVbdl0ubCA9IHRyaWVbdl0uciA9IHRyaWVbdl0uaWQgPSAwOwp9CgppbnQgdXBkYXRlKGludCB2LCBpbnQgaywgaW50IGlkKXsKCWNsZWFyKHB0cik7CglpbnQgbnYgPSBwdHIrKzsKCXRyaWVbbnZdID0gdHJpZVt2XTsKCWludCByZXQgPSBudjsKCWZvcihpbnQgaSA9IGRlcHRoIC0gMTsgaSA+PSAwOyBpLS0pewoJCWNsZWFyKHB0cik7CgkJaWYoKGs+PmkpJjEpewoJCQl0cmllW252XS5yID0gcHRyKys7CgkJCXRyaWVbdHJpZVtudl0ucl0gPSB0cmllW3RyaWVbdl0ucl07CgkJCW52ID0gdHJpZVtudl0ucjsKCQkJdiA9IHRyaWVbdl0ucjsKCQl9ZWxzZXsKCQkJdHJpZVtudl0ubCA9IHB0cisrOwoJCQl0cmllW3RyaWVbbnZdLmxdID0gdHJpZVt0cmllW3ZdLmxdOwoJCQludiA9IHRyaWVbbnZdLmw7CgkJCXYgPSB0cmllW3ZdLmw7CgkJfQoJfQoJaWYoIXRyaWVbbnZdLmlkKXRyaWVbbnZdLmlkID0gaWQ7CgllbHNlIHRyaWVbbnZdLmlkID0gbWluKHRyaWVbbnZdLmlkLCBpZCk7CglyZXR1cm4gcmV0Owp9CgppbnQgcXVlcnkoaW50IHYsIGludCBrKXsKICAgIGZvcihpbnQgaSA9IGRlcHRoIC0gMTsgaSA+PSAwOyBpLS0pewogICAgICAgIGlmKChrPj5pKSYxKXsKICAgICAgICAgICAgaWYodHJpZVt2XS5sKXYgPSB0cmllW3ZdLmw7CiAgICAgICAgICAgIGVsc2UgdiA9IHRyaWVbdl0ucjsKICAgICAgICB9ZWxzZXsKICAgICAgICAgICAgaWYodHJpZVt2XS5yKXYgPSB0cmllW3ZdLnI7CiAgICAgICAgICAgIGVsc2UgdiA9IHRyaWVbdl0ubDsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJpZVt2XS5pZDsKfQoKdm9pZCBjcmVhdGVSb290KGludCB2LCBpbnQgcCl7CiAgICBpbnQgYmcgPSAtMTsKICAgIGZvcihhdXRvIHUgOiBnW3ZdKXsKICAgICAgICBpZih1ICE9IHAgJiYgKGJnID09IC0xIHx8IHN6W2JnXSA8IHN6W3VdKSliZyA9IHU7CiAgICB9CiAgICBmb3IoYXV0byB1IDogZ1t2XSl7CiAgICAgICAgaWYodSAhPSBwKWNyZWF0ZVJvb3QodSwgdik7CiAgICB9CiAgICByb290W3ZdID0gKGJnID09IC0xKT8wOnJvb3RbYmddOwogICAgcm9vdFt2XSA9IHVwZGF0ZShyb290W3ZdLCB2YWxbdl0sIHYpOwogICAgZm9yKGF1dG8gdSA6IGdbdl0pewogICAgICAgIGlmKHUgPT0gcCB8fCB1ID09IGJnKWNvbnRpbnVlOwogICAgICAgIGZvcihpbnQgaSA9IHN0W3VdOyBpIDwgZW5bdV07IGkrKyl7CiAgICAgICAgICAgIGludCB3ID0gdmVydFtpXTsKICAgICAgICAgICAgaWYoc3Rbd10gPT0gaSl7CiAgICAgICAgICAgICAgICByb290W3ZdID0gdXBkYXRlKHJvb3Rbdl0sIHZhbFt3XSwgdyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCnZvaWQgc29sdmUoKXsKICAgIGludCBuLCBxLCB1LCB2LCBrOwogICAgY2luPj5uPj5xOwogICAgZm9yKGludCBpID0gMTsgaSA8PSBuOyBpKyspewogICAgICAgIGNpbj4+dmFsW2ldOwogICAgICAgIGdbaV0uY2xlYXIoKTsKICAgIH0KICAgIGZvcihpbnQgaSA9IDE7IGkgPCBuOyBpKyspewogICAgICAgIGNpbj4+dT4+djsKICAgICAgICBnW3VdLnB1c2hfYmFjayh2KTsKICAgICAgICBnW3ZdLnB1c2hfYmFjayh1KTsKICAgIH0KICAgIGRmcygxLCAtMSk7CiAgICBwdHIgPSB0cHRyID0gMTsKICAgIHRyaWVbMF0ubCA9IHRyaWVbMF0uciA9IHRyaWVbMF0uaWQgPSAwOwogICAgY3JlYXRlUm9vdCgxLCAtMSk7CiAgICBpbnQgbGFzdF9hbnN3ZXIgPSAwLCBsYXN0X25vZGUgPSAwOwogICAgd2hpbGUocS0tKXsKICAgICAgICBjaW4+PnY+Pms7CiAgICAgICAgdiBePSBsYXN0X25vZGU7CiAgICAgICAgayBePSBsYXN0X2Fuc3dlcjsKICAgICAgICBsYXN0X25vZGUgPSBxdWVyeShyb290W3ZdLCBrKTsKICAgICAgICBsYXN0X2Fuc3dlciA9IHZhbFtsYXN0X25vZGVdXms7CiAgICAgICAgY291dDw8bGFzdF9ub2RlPDwiICI8PGxhc3RfYW5zd2VyPDwnXG4nOwogICAgfQp9CgppbnQgbWFpbigpewoKCWlvczo6c3luY193aXRoX3N0ZGlvKGZhbHNlKTsKCWNpbi50aWUoTlVMTCk7Cgljb3V0LnRpZShOVUxMKTsKCiAgICBpbnQgdDsKICAgIGNpbj4+dDsKICAgIHdoaWxlKHQtLSlzb2x2ZSgpOwp9