#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10,M=2e6+10;
int f[N][25],dp[N][25];
int n,q;
int tot,head[N],ne[M],ver[M];
void add(int x,int y)
{
ver[++tot]=y;
ne[tot]=head[x];
head[x]=tot;
}
int t;
int v[N],dep[N];
int st[N][35];
inline void st_pre()
{
for(int i=1;i<=n;i++)
st[i][0]=dep[i];
int t=log2(n);
for(int j=1;j<=t;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
}
inline int st_query(int l,int r)
{
int t=log2(r-l+1);
return max(st[l][t],st[r-(1<<t)+1][t]);
}
inline void bfs()
{
queue<int>q;
q.push(1),v[1]=1;
dep[1]=1;
while(!q.empty())
{
int x=q.front();q.pop();
v[x]=0;
for(int i=head[x];i;i=ne[i])
{
int y=ver[i];
if(dep[y]!=0)
continue;
dep[y]=dep[x]+1;
f[y][0]=x;
for(int j=1;j<=t;j++)
f[y][j]=f[f[y][j-1]][j-1];
q.push(y);
}
}
}
inline int lca(int x,int y)
{
if(dep[x]>dep[y])
swap(x,y);
for(int i=t;i>=0;i--)
if(dep[x]<=dep[f[y][i]])
y=f[y][i];
if(x==y)
return x;
for(int i=t;i>=0;i--)
if(f[y][i]!=f[x][i])
y=f[y][i],x=f[x][i];
return f[x][0];
}
inline void lca_st_init()
{
for(int i=1;i<=n;i++)
dp[i][0]=i;
for(int j=1;j<=t;j++)
for(int i=1;i+(1<<j)-1<=n;i++)
dp[i][j]=lca(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
}
inline int lca_st(int l,int r)
{
int k=log2(r-l+1);
return lca(dp[l][k],dp[r-(1<<k)+1][k]);
}
inline void solve(int l,int r,int k)
{
int maxn=0,dd=st_query(l,r);
for(int i=l;i+k-1<=r;i++)
{
int j=i+k-1;
int fa=lca_st(i,j);
maxn=max(dep[fa],maxn);
if((maxn==dd-1&&k!=1)||maxn==dd)
{
printf("%d\n",maxn);
return ;
}
}
printf("%d\n",maxn);
}
int main()
{
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<n;i++)
{
int x,y;
scanf("%d%d",&x,&y);
add(x,y),add(y,x);
}
t=log2(n);
bfs();
lca_st_init();
st_pre();
scanf("%d",&q);
for(int i=1;i<=q;i++)
{
int l,r,k;
scanf("%d%d%d",&l,&r,&k);
solve(l,r,k);
}
return 0;
}