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

using i64 = long long;
#define mk make_pair
#define all(x) x.begin(), x.end()

template<typename T>void gmax(T &x,T y) { if(x<y) x=y; }
template<typename T>void gmin(T &x,T y) { if(x>y) x=y; }
#ifdef DEBUG
#define debug(x) cerr<<"["<<#x<<"]: "<<x<<endl
#else
#define debug(...) 114
#endif
const int N=5e5+5;
int n,q;
int dep[N],dfn[N];
vector<int>e[N];
int st[N][19],cnt;
int dmn[N][19],dmx[N][19];
void dfs(int u,int fa) {
    st[dfn[u]=++cnt][0]=fa;
    dep[u]=dep[fa]+1;
    dmn[u][0]=dmx[u][0]=dfn[u];
    for(int v:e[u]) if(v!=fa) dfs(v,u);
}
int get(int x,int y) {
    return dfn[x]<dfn[y]?x:y;
}
void build() {
    for(int i=1; i<=18; i++)
        for(int j=1; j+(1<<i)-1<=n; j++) {
            st[j][i]=get(st[j][i-1],st[j+(1<<i-1)][i-1]);
            dmn[j][i]=min(dmn[j][i-1],dmn[j+(1<<i-1)][i-1]);
            dmx[j][i]=max(dmx[j][i-1],dmx[j+(1<<i-1)][i-1]);
        }
}
int lca(int x,int y) {
    if(x==y) return x;
    if((x=dfn[x])>(y=dfn[y])) swap(x,y);
    int k=__lg(y-x++);
    return get(st[x][k],st[y-(1<<k)+1][k]);
}
pair<int,int> getd(int x,int y) {
    int k=__lg(y-x+1);
    return mk(min(dmn[x][k],dmn[y-(1<<k)+1][k]),max(dmx[x][k],dmx[y-(1<<k)+1][k]));
}

int main() {
    freopen("query.in","r",stdin);
    freopen("query.out","w",stdout);
    // freopen("err.txt","w",stderr);
    ios::sync_with_stdio(false),cin.tie(nullptr),cout.tie(nullptr);
    cin>>n;
    for(int i=1,u,v; i<n; i++) cin>>u>>v,e[u].push_back(v),e[v].push_back(u);
    cin>>q;
    bool flagA=1;
    int cntT[3]={0};
    for(int i=1; i<=n; i++) {
        if(e[i].size()>2) {
            flagA=0;
            break;
        }
        cntT[e[i].size()]++;
    }
    dfs(1,0);
    build();
    flagA&=cntT[1]==2&&cntT[2]==n-2;
    for(int l,r,k,_=1; _<=q; _++) {
        cin>>l>>r>>k;
        cerr<<l<<' '<<r<<' '<<k<<endl;
        if(n<=5000&&q<=5000) {
            int res=0;
            for(int L=l; L<=r-k+1; L++) {
                int R=L+k-1;
                int Lc=L;
                for(int i=L; i<=R; i++) Lc=lca(Lc,i);
                gmax(res,dep[Lc]);
            }
            cout<<res<<'\n';
            continue;
        }
        if(k==r-l+1) {
            auto res=getd(l,r);
            cout<<dep[lca(res.first,res.second)]<<'\n';
        }
        else if(flagA) {
            
        }
    }
    return 0;
}
