#include<bits/stdc++.h>
using namespace std;
int n,q,l,r,k,ans;
vector<int>e[500005];
int fa[500005][20],dep[500005];
int t[2000006];
void dfs(int u,int f)
{
fa[u][1]=f;
fa[u][0]=u;
dep[u]=dep[f]+1;
for(int v:e[u])
if(v!=f)
dfs(v,u);
}
int lca(int x,int y)
{
int nwx=x,nwy=y;
if(dep[nwx]<dep[nwy])
swap(nwx,nwy);
while(dep[nwx]>dep[nwy])
{
int i=1;
while(dep[fa[nwx][i]]>=dep[nwy])
i++;
nwx=fa[nwx][i-1];
}
if(nwx==nwy)
return nwx;
while(fa[nwx][1]!=fa[nwy][1])
{
int i=1;
while(fa[nwx][i]!=fa[nwy][i])
i++;
nwx=fa[nwx][i-1];
nwy=fa[nwy][i-1];
}
return fa[nwx][1];
}
void build(int i,int l,int r)
{
if(l==r)
{
t[i]=l;
return;
}
build(i<<1,l,l+r>>1);
build(i<<1|1,(l+r>>1)+1,r);
t[i]=lca(t[i<<1],t[i<<1|1]);
return;
}
int ask(int i,int l,int r,int L,int R)
{
if(l>=L&&r<=R)
return t[i];
int mid=l+r>>1;
if(R<=mid)
return ask(i<<1,l,mid,L,R);
if(L>mid)
return ask(i<<1|1,mid+1,r,L,R);
return lca(ask(i<<1,l,mid,L,R),ask(i<<1|1,mid+1,r,L,R));
}
int main()
{
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
scanf("%d",&n);
for(int i=1,u,v;i<n;i++)
{
scanf("%d%d",&u,&v);
e[u].push_back(v);
e[v].push_back(u);
}
dfs(1,0);
for(int i=2;i<=19;i++)
for(int j=1;j<=n;j++)
fa[j][i]=fa[fa[j][i-1]][i-1];
build(1,1,n);
scanf("%d",&q);
while(q--)
{
ans=-0x3f3f3f3f;
scanf("%d%d%d",&l,&r,&k);
for(int i=l;i+k-1<=r;i++)
ans=max(ans,dep[ask(1,1,n,i,i+k-1)]);
cout<<ans<<'\n';
}
return 0;
}