#include<bits/stdc++.h>
using namespace std;
const int N=500010,M=2*N;
int h[N],e[M],ne[M],idx;
int ans[5010][5010],fa[N][15],dep[N]; 
struct Node{
	int ls,rs,cnt;
}t[20000010];
int rt[N],idx2;
void add(int a,int b){
	e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}
void dfs(int u,int f){
	fa[u][0]=f;
	for(int i=1;i<=13;i++){
		fa[u][i]=fa[fa[u][i-1]][i-1];
	}
	dep[u]=dep[f]+1;
	for(int i=h[u];~i;i=ne[i]){
		int v=e[i];
		if(v==f)continue ;
		dfs(v,u);
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int i=13;i>=0;i--){
		if(dep[fa[x][i]]>=dep[y]){
			x=fa[x][i];
		}
	}
	if(x==y)return x;
	for(int i=13;i>=0;i--){
		if(fa[x][i]!=fa[y][i]){
			x=fa[x][i],y=fa[y][i];
		}
	}
	return fa[x][0];
}
void pushup(int x){
	t[x].cnt=t[t[x].ls].cnt+t[t[x].rs].cnt;
}
int insert(int u,int l,int r,int k){
	int now=++idx2;
	t[now]=t[u];
	if(l==r){
		t[now].cnt++;
		return now;
	}
	int mid=(l+r)>>1;
	if(k<=mid)t[now].ls=insert(t[now].ls,l,mid,k);
	else t[now].rs=insert(t[now].rs,mid+1,r,k);
	pushup(now);
	return now;
}
int query(int rt1,int rt2,int l,int r,int k){
	if(l==r){
		if(k<=t[rt2].cnt-t[rt1].cnt)return l;
		return -1;
	}
	int mid=(l+r)>>1;
	if(t[t[rt2].rs].cnt-t[t[rt1].rs].cnt>=k)return query(t[rt1].rs,t[rt2].rs,mid+1,r,k);
	else return query(t[rt1].ls,t[rt2].ls,l,mid,k-(t[t[rt2].rs].cnt-t[t[rt1].rs].cnt));
}
int main()
{
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	memset(h,-1,sizeof h);
	int n;
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v),add(v,u);
	} 
	int q;
	scanf("%d",&q);
	dfs(1,0);
	if(n<=5000&&q<=5000){
		for(int i=1;i<=n;i++){
			int l=i;
			ans[i][i]=dep[i];
			for(int j=i+1;j<=n;j++){
				l=lca(l,j);
				ans[i][j]=dep[l];
			}
		}
		while(q--){
			int l,r,k;
			scanf("%d%d%d",&l,&r,&k);
			int res=0;
			for(int i=l;i<=r-k+1;i++){
				res=max(res,ans[i][i+k-1]);
			}
			printf("%d\n",res);
		}
	}else{
		for(int i=1;i<=n;i++){
			rt[i]=insert(rt[i-1],1,n,dep[i]);
		}
		while(q--){
			int l,r,k;
			scanf("%d%d%d",&l,&r,&k);
			printf("%d\n",query(rt[l-1],rt[r],1,n,k));
		}
	}
	return 0;
}
