#include<bits/stdc++.h>
using namespace std;
#define MAXN 500005
int n,q;
vector<int>e[MAXN];
int fa[20][MAXN];
int dep[MAXN];
int mx[20][MAXN];
int lg2[MAXN];
void dfs(int u,int f){
mx[0][u]=dep[u];
for(auto v:e[u])if(v!=f){
dep[v]=dep[u]+1;
fa[0][v]=u;
dfs(v,u);
}
}
inline int qmx(int l,int r){
int t=lg2[r-l+1];
return max(mx[t][l],mx[t][r-(1<<t)+1]);
}
inline int lca(int x,int y){
if(dep[x]<dep[y])swap(x,y);
for(int j=19;j>=0;--j){
if(dep[fa[j][x]]>=dep[y])x=fa[j][x];
}
if(x==y)return x;
for(int j=19;j>=0;--j){
if(fa[j][x]!=fa[j][y])x=fa[j][x],y=fa[j][y];
}
return fa[0][x];
}
int ans[MAXN];
struct rg{
int l,r,k,v,id,tid;
}qq[MAXN*2];
inline bool inrg(int l,int r,int x){
return l<=x&&x<=r;
}
int tr[MAXN];
void ins(int x,int v){
for(;x<=n;x+=x&-x)tr[x]=max(tr[x],v);
}
void clr(int x){
for(;x<=n;x+=x&-x)tr[x]=0;
}
int get(int x){
int r=0;
for(;x;x^=x&-x)r=max(r,tr[x]);
return r;
}
void cdq3(int l,int r){
if(l==r)return;
int mid=(l+r)>>1;
cdq3(l,mid),cdq3(mid+1,r);
sort(qq+l,qq+r+1,[](const rg&a,const rg&b){
if(a.r==b.r){
if(a.id>0&&b.id==-1)return false;
if(a.id==-1&&b.id>0)return true;
return false;
}
return a.r>b.r;
});
for(int i=l;i<=r;++i){
if(inrg(l,mid,qq[i].tid)&&qq[i].id==-1){
ins(qq[i].l,qq[i].v);
}
else if(inrg(mid+1,r,qq[i].tid)&&qq[i].id>0){
ans[qq[i].id]=max(ans[qq[i].id],get(qq[i].l));
}
}
for(int i=l;i<=r;++i){
if(inrg(l,mid,qq[i].tid)&&qq[i].id==-1){
clr(qq[i].l);
}
}
}
int tot=0;
pair<int,int> v[MAXN];
namespace aaa{
int fa[MAXN],rr[MAXN];
inline int find(int x){
return (x==fa[x])?x:fa[x]=find(fa[x]);
}
void work(){
for(int i=1;i<=n;++i)fa[i]=i,rr[i]=i;
for(int i=1;i<n;++i){
int t=v[i].first,id=v[i].second;
int t1=find(id),t2=find(id+1);
fa[t2]=t1;
rr[t1]=rr[t2];
qq[++tot]=rg{t1,rr[t1],rr[t1]-t1+1,t,-1,0};
}
}
}
signed 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=1,u,v;i<n;++i){
cin>>u>>v;
e[u].emplace_back(v);
e[v].emplace_back(u);
}
dep[1]=1;
dfs(1,0);
for(int j=1;j<20;++j){
for(int i=1;i<=n;++i){
fa[j][i]=fa[j-1][fa[j-1][i]];
}
}
for(int j=1;j<20;++j){
for(int i=1;i+(1<<j)-1<=n;++i){
mx[j][i]=max(mx[j-1][i],mx[j-1][i+(1<<(j-1))]);
}
}
for(int i=2;i<=n;++i)lg2[i]=lg2[i>>1]+1;
cin>>q;
for(int i=1;i<=q;++i){
int l,r,k;
cin>>l>>r>>k;
if(k==1){
ans[i]=qmx(l,r);
}
else{
qq[++tot]=rg{r-k+1,l+k-1,k,0,i,0};
}
}
for(int i=1;i<n;++i){
v[i]=make_pair(dep[lca(i,i+1)],i);
}
sort(v+1,v+n,greater<pair<int,int> >());
aaa::work();
sort(qq+1,qq+tot+1,[](const rg&a,const rg&b){
if(a.k==b.k){
if(a.r!=b.r)return a.r>b.r;
if(a.id>0&&b.id==-1)return false;
if(a.id==-1&&b.id>0)return true;
return false;
}
return a.k>b.k;
});
for(int i=1;i<=tot;++i)qq[i].tid=i;
cdq3(1,tot);
for(int i=1;i<=q;++i){
cout<<ans[i]<<'\n';
}
}