#include<bits/stdc++.h>
const long long N=500000;
const long long M=30;
using namespace std;
long long n,q,qx,qy,ql,qr,qk,len,fa[N+3][M+3],head[N+5],cnt,dep[N+5],l[N+3][M+3],hp,ans,lg[N+5];
struct node{
    long long v,nxt;
}e[2*N+5];
long long LCA(long long x,long long y){
    if(dep[x]<dep[y]) swap(x,y);
    for(int i=M;i>=0;i--){
        if(dep[fa[x][i]]>=dep[y]) x=fa[x][i];
    }
    if(x==y) return x;
    for(int i=M;i>=0;i--){
        if(fa[x][i]!=fa[y][i]){
            x=fa[x][i];
            y=fa[y][i];
        }
    }
    return fa[x][0];
}
long long G(long long x,long long y){
    len=lg[y-x+1];
    return LCA(l[x][len],l[y-(1LL<<len)+1][len]);
}
void Add(long long x,long long y){
    cnt++;
    e[cnt].v=y;
    e[cnt].nxt=head[x];
    head[x]=cnt;
}
void DFS(long long x,long long f){
    dep[x]=dep[f]+1;
    fa[x][0]=f;
    for(int i=head[x];i!=0;i=e[i].nxt){
        if(e[i].v==f) continue;
        DFS(e[i].v,x);
    }
}
int main(){
    freopen("query.in","r",stdin);
    freopen("query.out","w",stdout);
    scanf("%lld",&n);
    lg[1]=0;
    for(int i=2;i<=n;i++)
        lg[i]=lg[i/2]+1;
    for(int i=1;i<n;i++){
        scanf("%lld%lld",&qx,&qy);
        Add(qx,qy);
        Add(qy,qx);
    }
    DFS(1,0);
    for(int j=1;j<=M;j++){
        for(int i=1;i<=n;i++)
            fa[i][j]=fa[fa[i][j-1]][j-1];
    }
    for(int i=1;i<n;i++){
        l[i][0]=i;
        l[i][1]=LCA(i,i+1);
        // cout<<l[i][1]<<endl;
    }
    l[n][0]=n;
    for(int j=2;j<=M;j++){
        for(int i=1;i+(1LL<<j)<=n;i++){
            hp=i+(1LL<<(j-1));
            l[i][j]=LCA(l[i][j-1],l[hp][j-1]);
            // cout<<i<<' '<<j<<' '<<l[i][j]<<endl;
        }
    }
    scanf("%lld",&q);
    while(q--){
        scanf("%lld%lld%lld",&ql,&qr,&qk);
        ans=0;
        for(int i=ql;i+qk-1<=n;i++){
            ans=max(ans,dep[G(i,i+qk-1)]);
        }
        printf("%lld\n",ans);
    }
    return 0;
}