#include<bits/stdc++.h>
#define MAX_N 100005
#define eb emplace_back
#define pb push_back
using namespace std;
struct Tree{
int l,r,v;
}tree[60*MAX_N];
int n;
int tn;
int par[35][MAX_N],val[MAX_N],dep[MAX_N];
int root[MAX_N];
vector<int> adj[MAX_N];
void update(int idx,int x,int y,int p){
tree[y].v=tree[x].v+1;
if(idx<0){
return ;
}
if(p>>idx&1){
tree[y].l=tree[x].l;
tree[y].r=++tn;
update(idx-1,tree[x].r,tree[y].r,p);
}else{
tree[y].r=tree[x].r;
tree[y].l=++tn;
update(idx-1,tree[x].l,tree[y].l,p);
}
}
int kQ(int idx,int x,int y,int p,int q,int k){
if(idx<0){
return 0;
}
int v = tree[tree[x].l].v+tree[tree[y].l].v-tree[tree[p].l].v-tree[tree[q].l].v;
if(v<k){
return (1<<idx)|kQ(idx-1,tree[x].r,tree[y].r,tree[p].r,tree[q].r,k-v);
}else{
return kQ(idx-1,tree[x].l,tree[y].l,tree[p].l,tree[q].l,k);
}
}
void dfs(int x){
for(int y:adj[x]){
if(root[y]) continue;
root[y] = ++tn;
update(30,root[x],root[y],val[y]);
par[0][y]=x;
dep[y]=dep[x]+1;
dfs(y);
}
}
void make_par(){
for(int i=1;i<=30;i++){
for(int j=1;j<=n;j++) par[i][j]=par[i-1][par[i-1][j]];
}
}
int lca(int x,int y){
if(dep[x]<dep[y]){
swap(x,y);
}
for(int i=30;i>=0;i--){
if(dep[par[i][x]]>=dep[y]){
x=par[i][x];
}
}
if(x==y){
return x;
}
for(int i=30;i>=0;i--){
if(par[i][x]!=par[i][y]){
x=par[i][x];
y=par[i][y];
}
}
return par[0][x];
}
int main(){
int x,y,p,q,m;
int i,k;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++){
scanf("%d",&val[i]);
}
for(i=1;i<n;i++){
scanf("%d %d",&x,&y);
adj[x].eb(y);
adj[y].eb(x);
}
root[0] = 0;
root[1] = ++tn;
update(30,0,1,val[1]);
dep[1]=1;
dfs(1);
make_par();
while(m--){
scanf("%d %d %d",&x,&y,&k);
p=lca(x,y);
q=par[0][p];
printf("%d\n",kQ(30,root[x],root[y],root[p],root[q],k));
}
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KI2RlZmluZSBNQVhfTiAxMDAwMDUKI2RlZmluZSBlYiBlbXBsYWNlX2JhY2sKI2RlZmluZSBwYiBwdXNoX2JhY2sKdXNpbmcgbmFtZXNwYWNlIHN0ZDsKc3RydWN0IFRyZWV7CglpbnQgbCxyLHY7Cn10cmVlWzYwKk1BWF9OXTsKaW50IG47CmludCB0bjsKaW50IHBhclszNV1bTUFYX05dLHZhbFtNQVhfTl0sZGVwW01BWF9OXTsKaW50IHJvb3RbTUFYX05dOwp2ZWN0b3I8aW50PiBhZGpbTUFYX05dOwp2b2lkIHVwZGF0ZShpbnQgaWR4LGludCB4LGludCB5LGludCBwKXsKCXRyZWVbeV0udj10cmVlW3hdLnYrMTsKCWlmKGlkeDwwKXsKCQlyZXR1cm4gOwoJfQoJaWYocD4+aWR4JjEpewoJCXRyZWVbeV0ubD10cmVlW3hdLmw7CgkJdHJlZVt5XS5yPSsrdG47CgkJdXBkYXRlKGlkeC0xLHRyZWVbeF0ucix0cmVlW3ldLnIscCk7Cgl9ZWxzZXsKCQl0cmVlW3ldLnI9dHJlZVt4XS5yOwoJCXRyZWVbeV0ubD0rK3RuOwoJCXVwZGF0ZShpZHgtMSx0cmVlW3hdLmwsdHJlZVt5XS5sLHApOwoJfQp9CgppbnQga1EoaW50IGlkeCxpbnQgeCxpbnQgeSxpbnQgcCxpbnQgcSxpbnQgayl7CglpZihpZHg8MCl7CgkJcmV0dXJuIDA7Cgl9CgoJaW50IHYgPSB0cmVlW3RyZWVbeF0ubF0udit0cmVlW3RyZWVbeV0ubF0udi10cmVlW3RyZWVbcF0ubF0udi10cmVlW3RyZWVbcV0ubF0udjsKCglpZih2PGspewoJCXJldHVybiAoMTw8aWR4KXxrUShpZHgtMSx0cmVlW3hdLnIsdHJlZVt5XS5yLHRyZWVbcF0ucix0cmVlW3FdLnIsay12KTsKCX1lbHNlewoJCXJldHVybiBrUShpZHgtMSx0cmVlW3hdLmwsdHJlZVt5XS5sLHRyZWVbcF0ubCx0cmVlW3FdLmwsayk7Cgl9Cn0Kdm9pZCBkZnMoaW50IHgpewoJZm9yKGludCB5OmFkalt4XSl7CgkJaWYocm9vdFt5XSkJY29udGludWU7CgkJcm9vdFt5XSA9ICsrdG47CgkJdXBkYXRlKDMwLHJvb3RbeF0scm9vdFt5XSx2YWxbeV0pOwoJCXBhclswXVt5XT14OwoJCWRlcFt5XT1kZXBbeF0rMTsKCQlkZnMoeSk7Cgl9Cn0Kdm9pZCBtYWtlX3BhcigpewoJZm9yKGludCBpPTE7aTw9MzA7aSsrKXsKCQlmb3IoaW50IGo9MTtqPD1uO2orKykJcGFyW2ldW2pdPXBhcltpLTFdW3BhcltpLTFdW2pdXTsKCX0KfQppbnQgbGNhKGludCB4LGludCB5KXsKCWlmKGRlcFt4XTxkZXBbeV0pewoJCXN3YXAoeCx5KTsKCX0KCglmb3IoaW50IGk9MzA7aT49MDtpLS0pewoJCWlmKGRlcFtwYXJbaV1beF1dPj1kZXBbeV0pewoJCQl4PXBhcltpXVt4XTsKCQl9Cgl9CgoJaWYoeD09eSl7CgkJcmV0dXJuIHg7Cgl9CgoJZm9yKGludCBpPTMwO2k+PTA7aS0tKXsKCQlpZihwYXJbaV1beF0hPXBhcltpXVt5XSl7CgkJCXg9cGFyW2ldW3hdOwoJCQl5PXBhcltpXVt5XTsKCQl9Cgl9CglyZXR1cm4gcGFyWzBdW3hdOwp9CmludCBtYWluKCl7CglpbnQgeCx5LHAscSxtOwoJaW50IGksazsKCXNjYW5mKCIlZCAlZCIsJm4sJm0pOwoKCWZvcihpPTE7aTw9bjtpKyspewoJCXNjYW5mKCIlZCIsJnZhbFtpXSk7Cgl9CgoJZm9yKGk9MTtpPG47aSsrKXsKCQlzY2FuZigiJWQgJWQiLCZ4LCZ5KTsKCQlhZGpbeF0uZWIoeSk7CgkJYWRqW3ldLmViKHgpOwoJfQoKCXJvb3RbMF0gPSAwOwoJcm9vdFsxXSA9ICsrdG47CgoJdXBkYXRlKDMwLDAsMSx2YWxbMV0pOwoKCWRlcFsxXT0xOwoKCWRmcygxKTsKCW1ha2VfcGFyKCk7CgoJd2hpbGUobS0tKXsKCQlzY2FuZigiJWQgJWQgJWQiLCZ4LCZ5LCZrKTsKCQlwPWxjYSh4LHkpOwoJCXE9cGFyWzBdW3BdOwoJCXByaW50ZigiJWRcbiIsa1EoMzAscm9vdFt4XSxyb290W3ldLHJvb3RbcF0scm9vdFtxXSxrKSk7Cgl9CglyZXR1cm4gMDsKfQo=