#include<bits/stdc++.h>
using namespace std;

#define int long long

const int N=5e5+5;

int n,q;
vector<int> G[N];
int f[N][20],dep[N];
struct ques{
    int l,r,k;
}Q[N];
int deg[N];
int st[N][20];

inline int rd()
{
    int x=0,f=1;char ch=getchar();
    for(;ch<'0'||ch>'9';ch=getchar())
        if(ch=='-')
            f=-1;
    for(;ch>='0'&&ch<='9';ch=getchar())
        x=(x<<3)+(x<<1)+(ch^48);
    return x*f;
}

void wt(const int &x)
{
    if(x<0)
        return putchar('-'),wt(-x),void();
    if(x>9)
        wt(x/10),putchar(x%10+48);
    else
        putchar(x+48);
}

void dfs(int u,int pa)
{
    dep[u]=dep[f[u][0]=pa]+1;
    for(int i=1;i<=19;i++)
        f[u][i]=f[f[u][i-1]][i-1];
    for(int v:G[u]){
        if(v==pa) continue;
        dfs(v,u);
    }
}

int LCA(int u,int v)
{
    if(dep[u]<dep[v]) swap(u,v);
    for(int i=19;~i;i--)
        if(dep[f[u][i]]>=dep[v])
            u=f[u][i];
    if(u==v) return u;
    for(int i=19;~i;i--)
        if(f[u][i]^f[v][i])
            u=f[u][i],v=f[v][i];
    return f[u][0];
}

void init()
{
    for(int i=1;i<=n;i++)
        st[i][0]=i;
    for(int j=1;j<=19;j++){
        for(int i=1;i+(1<<(j-1))<=n;i++){
            st[i][j]=LCA(st[i][j-1],st[i+(1<<(j-1))][j-1]);
        }
    }
}

int qry(int l,int r)
{
    int k=log2(r-l+1);
    return LCA(st[l][k],st[r-(1<<k)+1][k]);
}

namespace A
{
    bool check(){
        for(int i=1;i<=q;i++)
            if(Q[i].k!=Q[i].r-Q[i].l+1)
                return 0;
        return 1;
    }
    void sol(){
        for(int _=1;_<=q;_++){
            int l=Q[_].l,r=Q[_].r,k=Q[_].k;
            int ans=1;
            for(int i=l;i+k-1<=r;i++){
                int j=i+k-1;
                int lca=qry(i,j);
                ans=max(ans,dep[lca]);
            }
            wt(ans),putchar('\n');
        }
    }
} // namespace A

namespace B
{
    bool check(){
        for(int i=1;i<=n;i++)
            if(deg[i]>2)    
                return 0;
        return deg[1]==1;
    }
    void sol(){
        for(int _=1;_<=q;_++){
            int l=Q[_].l,r=Q[_].r,k=Q[_].k;
            int pos=l;
            for(int i=l;i<=l+k-1;i++)
                if(dep[i]<dep[pos])
                    pos=i;
            int ans=dep[pos];
            for(int i=pos+1;i+k-1<=r;i=pos+1){
                for(int j=i;j<=i+k-1;j++)
                    if(dep[j]<dep[pos])
                        pos=j;
                ans=max(ans,dep[pos]);
            }
            wt(ans),putchar('\n');
        }
    }
} // namespace B

signed main()
{
    freopen("query.in","r",stdin);
    freopen("query.out","w",stdout);
    n=rd();
    for(int i=1,u,v;i<n;i++){
        u=rd(),v=rd();
        G[u].emplace_back(v);
        G[v].emplace_back(u);
        ++deg[u],++deg[v];
    }
    q=rd();
    for(int i=1;i<=q;i++)
        Q[i].l=rd(),Q[i].r=rd(),Q[i].k=rd();
    dfs(1,0);
    init();
    if(n<=5000||A::check())
        return A::sol(),0;
    if(B::check())
        return B::sol(),0;
    return 0;
}
// 727558 AFO