#include<bits/stdc++.h>
using namespace std;
int n,x,y,q,l,r,k,dep[500005],root[500005],cnt;
struct o{
	int l,r,s;
}tr[500005<<4];
vector<int>v[500005];
void dfs(int x,int fa){
	dep[x]=dep[fa]+1;
	for(int i=0;i<v[x].size();i++){
		int y=v[x][i];
		if(y==fa)continue;
		dfs(y,x);
	}
}
void pushup(int c){
	tr[c].s=tr[tr[c].l].s+tr[tr[c].r].s;
}
void update(int l,int r,int x,int last,int &c){
	tr[c=++cnt]=tr[last];
	if(l==r){
		tr[c].s++;
		return;
	}
	int mid=l+r>>1;
	if(x<=mid)update(l,mid,x,tr[last].l,tr[c].l);
	else update(mid+1,r,x,tr[last].r,tr[c].r);
	pushup(c);
}
int query(int l,int r,int x,int y,int k){
	if(l==r)return l;
	int mid=l+r>>1;
	if(tr[tr[y].l].s-tr[tr[x].l].s>=k)return query(l,mid,tr[x].l,tr[y].l,k);
	else return query(mid+1,r,tr[x].r,tr[y].r,k-(tr[tr[y].l].s-tr[tr[x].l].s)); 
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++)scanf("%d%d",&x,&y),v[x].push_back(y),v[y].push_back(x);
	dfs(1,0);
	for(int i=1;i<=n;i++)update(1,n,dep[i],root[i-1],root[i]);
	scanf("%d",&q);
	while(q--){
		scanf("%d%d%d",&l,&r,&k);
		printf("%d\n",query(1,n,root[l-1],root[r],r-l+1-k+1));
	}
	return 0;
}
