#include<bits/stdc++.h>
using namespace std;
const int N=500010;
struct node{
	int x,y,nxt;
}p[N<<1];
int n,Q,x,y,cnt,h[N],dep[N],f[N][25];
void in(int x,int y){
	p[++cnt].x=x,p[cnt].y=y;
	p[cnt].nxt=h[x],h[x]=cnt;
}
void dfs(int x,int lx){
	dep[x]=dep[lx]+1;
	for(int k=h[x];k;k=p[k].nxt){
		int y=p[k].y;
		if(y==lx) continue;
		dfs(y,f[y][0]=x);
	}
}
int LCA(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=24;~i;i--){
		if(dep[f[x][i]]>=dep[y]) x=f[x][i];
	}
	if(x==y) return x;
	for(int i=24;~i;i--){
		if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
	}
	return f[x][0];
}
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);
		in(x,y),in(y,x);
	}
	dfs(1,0);
	for(int i=1;i<25;i++){
		for(int j=1;j<=n;j++){
			f[j][i]=f[f[j][i-1]][i-1];
		}
	}
	scanf("%d",&Q);
	while(Q--){
		int l,r,k,ans=0;
		scanf("%d%d%d",&l,&r,&k);
		for(int i=l;i+k-1<=r;i++){
			x=i;
			for(int j=i+1;j<=i+k-1;j++) x=LCA(x,j);
//			printf("%d->%d\n",i,x);
			ans=max(ans,dep[x]);
		}
		printf("%d\n",ans);
	}
	return 0;
}
