#include<bits/stdc++.h>
using namespace std;
const int _=5e5+5;
int a[_],c[_],d[20][_],f[20][_],s[_],p[_],o[_<<2],l[_],r[_],t,n,m,w[_];
vector<pair<int,int> >b[_],g[_<<1];
vector<int>e[_],h[_<<1],q[_];
void upd(int x,int l,int r,int p,int v){
if(l==r){
o[x]=max(o[x],v);
return;
}
int mid=(l+r)>>1;
if(p<=mid)upd(x<<1,l,mid,p,v);
else upd(x<<1|1,mid+1,r,p,v);
o[x]=max(o[x<<1],o[x<<1|1]);
}
int qry(int x,int l,int r,int ql,int qr){
if(ql>qr)return 0;
if(ql<=l&&r<=qr)return o[x];
int mid=(l+r)>>1,res=0;
if(ql<=mid)res=max(res,qry(x<<1,l,mid,ql,qr));
if(qr>mid)res=max(res,qry(x<<1|1,mid+1,r,ql,qr));
return res;
}
void dfs(int x,int fa){
d[0][x]=d[0][fa]+1;f[0][x]=fa;
for(int i=1;i<=18;i++)f[i][x]=f[i-1][f[i-1][x]];
for(int y:e[x])
if(y!=fa)dfs(y,x);
}
int lca(int x,int y){
if(d[0][x]<d[0][y])swap(x,y);
for(int i=18;~i;i--)
if(d[0][f[i][x]]>=d[0][y])x=f[i][x];
if(x==y)return x;
for(int i=18;~i;i--)
if(f[i][x]!=f[i][y])x=f[i][x],y=f[i][y];
return f[0][x];
}
int gmx(int x,int y){
int ln=c[y-x+1];
return max(d[ln][x],d[ln][y-(1<<ln)+1]);
}
int main(){
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
ios::sync_with_stdio(0);
cin.tie(0);cout.tie(0);
cin>>n;
for(int i=2,x,y;i<=n;i++){
cin>>x>>y;c[i]=c[i>>1]+1;
e[x].push_back(y);
e[y].push_back(x);
}
dfs(1,0);
for(int i=1;i<n;i++){
p[i]=d[0][lca(i,i+1)];
while(t&&p[s[t]]>=p[i])t--;
a[i]=s[t];s[++t]=i;
}
t=0;
for(int i=n-1;i;i--){
while(t&&p[s[t]]>=p[i])t--;
if(t)b[a[i]+1+n-s[t]].push_back({a[i]+1,p[i]}),g[a[i]+1+n-s[t]+n-1-(a[i]+1)].push_back({a[i]+1,p[i]});
else b[a[i]+1].push_back({a[i]+1,p[i]}),g[a[i]+1+n-2-a[i]].push_back({a[i]+1,p[i]});
s[++t]=i;
}
for(int i=1;i<=18;i++)
for(int j=1;j+(1<<(i-1))<=n;j++)d[i][j]=max(d[i-1][j],d[i-1][j+(1<<(i-1))]);
cin>>m;
for(int i=1,x,y,z;i<=m;i++){
cin>>x>>y>>z;
if(z==1)w[i]=gmx(x,y);
else l[i]=x,r[i]=y-z+1,q[n+1-z].push_back(i),h[n+1-z+n-1-l[i]].push_back(i);
}
for(int i=1;i<n;i++){
for(pair<int,int> j:b[i])upd(1,1,n-1,j.first,j.second);
for(int j:q[i])w[j]=qry(1,1,n-1,l[j],r[j]);
}
memset(o,0,sizeof(o));
for(int i=1;i<n+n;i++){
for(pair<int,int> j:g[i])upd(1,1,n-1,j.first,j.second);
for(int j:h[i])w[j]=max(w[j],qry(1,1,n-1,1,l[j]-1));
}
for(int i=1;i<=m;i++)cout<<w[i]<<'\n';
return 0;
}