#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10;
vector<int> G[N];
int f[22][N],dep[N];
int F[5010][5010],in[N];
int t[N<<2];
int n,q,uu,vv,l,r,k,ans;

inline void dfs(int u, int fa){
	dep[u]=dep[fa]+1,f[0][u]=fa,in[fa]++;
	for(int i=1; i<=20; i++) f[i][u]=f[i-1][f[i-1][u]];
	for(int i=0; i<G[u].size(); i++){
		int v=G[u][i];
		if(v!=fa) dfs(v,u);
	}
} 
inline int LCA(int x, int y){
    if(x==y) return x;
    if(dep[x]<dep[y]) swap(x,y);
    int dis=dep[x]-dep[y];
    for(int i=0; dis&&i<=18; i++){
        if(dis&(1<<i)) x=f[i][x];
    }
    if(x==y) return x;
    for(int i=18; i>=0; i--){
        if(f[i][x]!=f[i][y]){
            x=f[i][x],y=f[i][y];
        }
    }
    return f[0][x];
}
inline int solve(int L, int R){
    if(L==R) return dep[L];
    int lca=LCA(L,L+1);
    for(int i=L+2; i<=R; i++){
        lca=LCA(i,lca);
    }
    return dep[lca];
}
inline void build(int p, int l, int r){
    if(l==r){ t[p]=dep[l]; return ; }
    int mid=l+r>>1,lt=p<<1,rt=p<<1|1;
    build(lt,l,mid),build(rt,mid+1,r);
    t[p]=max(t[lt],t[rt]);
}
inline int query(int p, int l, int r, int L, int R){
    if(L<=l&&r<=R) return t[p];
    int mid=l+r>>1,lt=p<<1,rt=p<<1|1,ans=0;
    if(L<=mid) ans=max(ans,query(lt,l,mid,L,R));
    if(mid<R) ans=max(ans,query(rt,mid+1,r,L,R));
    return ans;
}

int main(){
    freopen("query.in","r",stdin);
    freopen("query.out","w",stdout);
    ios::sync_with_stdio(false);
    cin.tie(0),cout.tie(0);
    cin>>n;
    for(int i=1; i<n; i++){
        cin>>uu>>vv;
        G[uu].push_back(vv),G[vv].push_back(uu);
    } 
    dfs(1,1);
    bool fg=true;
    for(int i=1; i<n; i++){
        if(in[i]!=1){ fg=false; break; }
    }
    cin>>q;
    //cout<<fg<<'\n';
    if(fg==true){
        build(1,1,n);
        while(q--){
            cin>>l>>r>>k;
            cout<<query(1,1,n,l,r)<<'\n';
        }
        return 0;
    }   
    for(int i=1; i<=n; i++){
        for(int j=1; j+i-1<=n; j++){
            F[j][i+j-1]=solve(j,i+j-1);
        }
    }
    while(q--){
        ans=1;
        cin>>l>>r>>k;
        for(int i=k; i<=n; i++){
            for(int j=l; j+i-1<=r; j++){
                ans=max(ans,F[j][i+j-1]);
            }
        }
        cout<<ans<<'\n';
    }
    return 0;
}