#include<bits/stdc++.h>


using namespace std;
typedef long long ll;
typedef unsigned long long ull;
ifstream fin("query.in");
ofstream fout("query.out");
//#define fout cout
const int nn=500005;
int n;
vector<int> a[nn];
//vector<int> newa[nn];
struct Question{
    int l;
    int r;
    int k;
}ask[nn];
int q;
int dfn[nn];
/*
int fa[nn];
int getfa(int u){
    return (fa[u]==u)?u:getfa(fa[u]);
}
*/

priority_queue<int> pq;
/*
void dfs(int u,int depth){
    dfn[u]=depth;

    for(auto &v: a[u]){
        dfs(v,depth+1);
    }

}
*/
void tarjan(){

}
int main()
{
    int u,v;
    int l,r,k;
    int go=1,dep=0;
    ios::sync_with_stdio(false);
    fin>>n;
  /*  for(int i=1;i<=n;i++){
        fa[i]=i;
    }
    */
    for(int i=1;i<=n-1;i++){
        fin>>u>>v;
        a[u].push_back(v);
        //fa[v]=getfa(u);
    }
    /*
    for(int i=1;i<=n;i++){
        for(auto &v: a[i]){
            fout<<v<<' ';
    }
    fout<<endl;
    }
    */
    for(int i=1;i<n;i++){
        dfn[go]=++dep;
        go=a[go][0];
    }

    //dfs(1,1);
    //assert(0);
    fin>>q;
    for(int i=1;i<=q;i++){
        fin>>ask[i].l>>ask[i].r>>ask[i].k;
    }

    for(int i=1;i<=q;i++){
        l=ask[i].l,r=ask[i].r,k=ask[i].k;
        while(!pq.empty())  pq.pop();
        for(int j=l;j<=r;j++){
            pq.push(dfn[j]);
        }
        for(int i=1;i<=k-2;i++){
            pq.pop();
        }
        fout<<pq.top()<<'\n';
        //fout<<r-(k-1)<<'\n';

    }

    //cout << "Hello world!" << endl;
    return 0;
}
