#include<bits/stdc++.h>
using namespace std;
const int N=5e5+1;
int n,Q,LCA[5001][5001],fa[N],sz[N],dep[N],son[N],top[N],d[N],st[20][N];
int head[N],nxt[N<<1],to[N<<1],cnt;
void add(int u,int v)
{
    to[++cnt]=v;
    nxt[cnt]=head[u];
    head[u]=cnt;
}
void dfs1(int u,int f)
{
    fa[u]=f;
    dep[u]=dep[f]+1;
    sz[u]=1;
    for(int i=head[u];i;i=nxt[i]){
        if(to[i]!=f){
            dfs1(to[i],u);
            sz[u]+=sz[to[i]];
            if(sz[son[u]]<sz[to[i]]) son[u]=to[i];
        }
    }
}
void dfs2(int u,int t)
{
    top[u]=t;
    if(son[u]) dfs2(son[u],t);
    for(int i=head[u];i;i=nxt[i]){
        if(to[i]!=fa[u]&&to[i]!=son[u]){
            dfs2(to[i],to[i]);
        }
    }
}
int lca(int u,int v)
{
    while(top[u]!=top[v]){
        if(dep[top[u]]<dep[top[v]]) swap(u,v);
        u=fa[top[u]];
    }
    return dep[u]>dep[v]?v:u;
}
int query(int l,int r){
    int x=__lg(r-l+1);
    return min(st[x][l],st[x][r-(1<<x)+1]);
}
int main()
{
    // int tim=clock();
    freopen("query.in","r",stdin);
    freopen("query.out","w",stdout);
    cin.tie(0)->sync_with_stdio(0);
    cin>>n;
    for(int i=1,u,v;i<n;i++){
        cin>>u>>v;
        add(u,v),add(v,u);
        d[u]++,d[v]++;
    }
    int fl=0;
    for(int i=1;i<=n;i++) if(d[i]>2){fl=1;break;}
    dfs1(1,0),dfs2(1,1);
    cin>>Q;
    if(n<=5000){
        for(int i=1;i<=n;i++) LCA[i][i]=i;
        for(int i=1;i<=n;i++){
            for(int j=i+1;j<=n;j++){
                LCA[i][j]=lca(LCA[i][j-1],j);
            }
        }
        for(int i=1,l,r,K;i<=Q;i++){
            cin>>l>>r>>K;
            int ans=0;
            for(int j=l;j<=r-K+1;j++){
                ans=max(ans,dep[LCA[j][j+K-1]]);
            }
            cout<<ans<<"\n";
        }
    }
    else{
        for(int i=1,l,r,K;i<=Q;i++){
            cin>>l>>r>>K;
            cout<<1<<"\n";
        }
    }
    return 0;
    // cerr<<1.0*(clock()-tim)/CLOCKS_PER_SEC;
}