#include <cstdio>
#include <iostream>
#include <algorithm>
using namespace std;
const int N=500005;
int pn,cnt,qn,first[N],dfsn[N],deep[N],st1[20][N],st2[20][N];
struct Bian{
	int to,next;
}b[N*2];
void add(int from,int to){
	cnt++;
	b[cnt].to=to;
	b[cnt].next=first[from];
	first[from]=cnt;
}
void dfs(int now,int f){
	cnt++;
	deep[now]=deep[f]+1;
	dfsn[now]=cnt;
	st1[0][cnt]=f;
	for(int i=first[now];i!=0;i=b[i].next){
		if(b[i].to!=f){
			dfs(b[i].to,now);
		}
	}
}
int get1(int n1,int n2){
	if(dfsn[n1]<dfsn[n2]){
		return n1;
	}else{
		return n2;
	}
}
int lca(int p1,int p2){
	if(p1==p2){
		return p1;
	}
	p1=dfsn[p1];
	p2=dfsn[p2];
	if(p1>p2){
		swap(p1,p2);
	}
	int ls=__lg(p2-p1);
	return get1(st1[ls][p1+1],st1[ls][p2-(1<<ls)+1]);
}
int cha(int l,int r){
	int ls=__lg(r-l+1);
	return lca(st2[ls][l],st2[ls][r-(1<<ls)+1]);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&pn);
	for(int i=1;i<pn;i++){
		int from,to;
		scanf("%d%d",&from,&to);
		add(from,to);
		add(to,from);
	}
	cnt=0;
	dfs(1,1);
	for(int i=1;i<=__lg(pn);i++){
		for(int j=1;j+(1<<i)-1<=pn;j++){
			st1[i][j]=get1(st1[i-1][j],st1[i-1][j+(1<<(i-1))]);
		}
	}
	for(int i=1;i<pn;i++){
		st2[0][i]=lca(i,i+1);
	}
	for(int i=1;i<=__lg(pn-1);i++){
		for(int j=1;j+(1<<i)-1<pn;j++){
			st2[i][j]=lca(st2[i-1][j],st2[i-1][j+(1<<(i-1))]);
		}
	}
	scanf("%d",&qn);
	for(;qn>0;qn--){
		int l,r,len,ans=0;
		scanf("%d%d%d",&l,&r,&len);
		if(len==1){
			for(int i=l;i<=r;i++){
				ans=max(ans,deep[i]);
			}
		}else{
			for(int i=l;i+len-1<=r;i++){
				ans=max(ans,deep[cha(i,i+len-2)]);
			}
		}
		printf("%d\n",ans);
	}
	return 0;
}
