#include<bits/stdc++.h>
using namespace std;

int n,q;
int hd[500010],to[1000010],nt[1000010],tot;
int fa[500010][20];
int dep[500010];
int st[500010][20];
int lg[500010];

void add(int u,int v){
	tot++;
	to[tot]=v;
	nt[tot]=hd[u];
	hd[u]=tot;
}

void dfs(int x,int f){
	dep[x]=dep[f]+1;
	for(int i=hd[x];i;i=nt[i]){
		int y=to[i];
		if(y==f) continue;
		fa[y][0]=x;
		dfs(y,x);
	}
}

int lca(int x,int y){
	if(x==y) return x;
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=19;i>=0;i--){
		if(dep[fa[x][i]]<dep[y]) continue;
		x=fa[x][i];
	}
	if(x==y) return x;
	for(int i=19;i>=0;i--){
		if(fa[x][i]==fa[y][i]) continue;
		x=fa[x][i];
		y=fa[y][i];
	}
	return fa[x][0];
}

int getv(int l,int r){
	int k=lg[r-l+1];
	return lca(st[l][k],st[r-(1<<k)+1][k]);
}

int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	
	scanf("%d",&n);
	lg[0]=lg[1]=0;
	for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v);
		add(u,v);
		add(v,u);
	}
	dfs(1,0);
	for(int i=1;i<20;i++){
		for(int j=1;j<=n;j++){
			fa[j][i]=fa[fa[j][i-1]][i-1];
		}
	}
	for(int i=1;i<=n;i++) st[i][0]=i;
	for(int i=1;i<20;i++){
		for(int j=1;j<=n;j++){
			if(j+(1ll<<i)-1>1ll*n) break;
			st[j][i]=lca(st[j][i-1],st[j+(1<<(i-1))][i-1]);
		}
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		//cout<<getv(l,r)<<endl;
		int ans=0;
		for(int j=l;j+k-1<=r;j++) ans=max(ans,dep[getv(j,j+k-1)]);
		printf("%d\n",ans);
	}
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}
