#include<bits/stdc++.h>
using namespace std;
const int MAXN=5e5+5;
int n;
vector<int> v[MAXN];
int dep[MAXN];
int f[MAXN][20+5];
int t[4*MAXN];
void dfs(int d,int fa){
	dep[d]=dep[fa]+1;
	f[d][0]=fa;
	for(int i=1;(1<<i)<dep[d];i++){
		f[d][i]=f[f[d][i-1]][i-1];
	}
	for(int i=0;i<v[d].size();i++){
		int tmp=v[d][i];
		if(tmp==fa){
			continue;
		}
		dfs(tmp,d);
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y]){
		swap(x,y);
	}
	for(int i=20;i>=0;i--){
		if(dep[f[x][i]]>=dep[y]){
			x=f[x][i];
		}
	}
	if(x==y){
		return x;
	}
	for(int i=20;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			x=f[x][i];
			y=f[y][i];
		}
	}
	return f[x][0];
}
void build(int d,int l,int r){
	if(l==r){
		t[d]=l;
		return;
	}
	build(2*d,l,(l+r)/2);
	build(2*d+1,(l+r)/2+1,r);
	t[d]=lca(t[2*d],t[2*d+1]);
}
int query(int d,int l,int r,int ql,int qr){
	if(r<ql||l>qr){
		return 0;
	}
	if(ql<=l&&qr>=r){
		return t[d];
	}
	int tmp1=query(2*d,l,(l+r)/2,ql,qr),tmp2=query(2*d+1,(l+r)/2+1,r,ql,qr);
	if(tmp1==0){
		return tmp2;
	}
	if(tmp2==0){
		return tmp1;
	}
	return lca(tmp1,tmp2);
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		int x,y;
		scanf("%d%d",&x,&y);
		v[x].push_back(y);
		v[y].push_back(x);
	}
	dfs(1,0);
	build(1,1,n);
	int q;
	scanf("%d",&q);
	while(q--){
		int l,r,k;
		scanf("%d%d%d",&l,&r,&k);
		int ans=0;
		for(int i=l;i+k-1<=r;i++){
			//printf("%d ",query(1,1,n,i,i+k-1));
			ans=max(ans,dep[query(1,1,n,i,i+k-1)]);
		}
		printf("%d\n",ans);
	}
}
