#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read(){
int x=0; char ch=getchar();
while(ch<'0'||ch>'9') ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
return x;
}
const int N=1e5+5000;
int n,m,tot,cnt,ans,nrk;
struct TREE{
int l,r,sum;
}t[32*N];
int T[N],h[N],a[N],rk[N],fa[N][28],dep[N];
struct edge{
int v,nxt;
}e[2*N];
void add(int u,int v){
e[++tot].nxt=h[u];
e[tot].v=v;
h[u]=tot;
}
int LCA(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
for(int i=25;i>=0;i--){
if(dep[fa[u][i]]>=dep[v]) u=fa[u][i];
}
if(u==v) return u;
for(int i=25;i>=0;i--)
if(fa[u][i]!=fa[v][i]) u=fa[u][i],v=fa[v][i];
return fa[u][0];
}
int build(int l,int r){
int rt=++cnt;
if(l<r){
int mid=(l+r)>>1;
t[rt].l=build(l,mid);
t[rt].r=build(mid+1,r);
}
return rt;
}
int update(int pre,int l,int r,int val){
int rt=++cnt;
t[rt].l=t[pre].l,t[rt].r=t[pre].r,t[rt].sum=t[pre].sum+1;
if(l<r){
int mid=(l+r)>>1;
if(val<=mid) t[rt].l=update(t[pre].l,l,mid,val);
else t[rt].r=update(t[pre].r,mid+1,r,val);
}
return rt;
}
void init(){
sort(a+1,a+n+1);
nrk=n;
n=unique(a+1,a+nrk+1)-a-1;
T[0]=build(1,n);
for(int i=1;i<=nrk;i++){
rk[i]=lower_bound(a+1,a+n+1,rk[i])-a;
}
}
void dfs(int u){
for(int i=h[u];i!=0;i=e[i].nxt){
int v=e[i].v;
if(v==fa[u][0]) continue ;
dep[v]=dep[u]+1;
fa[v][0]=u;
T[v]=update(T[u],1,n,rk[v]);
dfs(v);
}
}
int sum(int u,int v,int f,int ff,int l,int r,int k){
if(l==r) return l;
int x=t[t[u].l].sum+t[t[v].l].sum-t[t[f].l].sum-t[t[ff].l].sum;
int mid=(l+r)>>1;
if(x>=k) return sum(t[u].l,t[v].l,t[f].l,t[ff].l,l,mid,k);
else return sum(t[u].r,t[v].r,t[f].r,t[ff].r,mid+1,r,k-x);
}
signed main(){
n=read();
m=read();
for(int i=1;i<=n;i++) rk[i]=read(),a[i]=rk[i];
for(int i=1;i<n;i++){
int u=read(),v=read();
add(u,v);
add(v,u);
}
init();
dep[1]=1;
dfs(1);
for(int j=1;j<=25;j++){
for(int i=1;i<=nrk;i++){
fa[i][j]=fa[fa[i][j-1]][j-1];
}
}
int last=0;
while(m--){
int x=read(),y=read(),k=read();
x=x^last;
int lca=LCA(x,y);
ans=sum(T[x],T[y],T[lca],T[fa[lca][0]],1,n,k);
cout<<a[ans]<<endl;
last=a[ans];
}
return 0;
}