#include<bits/stdc++.h>
using namespace std;
const int N=5e5+5;
int n,m,a[5005][5005],de[N],fa[21][N],tr[N*4],fi[N],to[N*2],la[N*2],tot;
void add(int x,int y){tot++,to[tot]=y,la[tot]=fi[x],fi[x]=tot;}
void dfs(int x,int y){
	de[x]=de[y]+1,fa[0][x]=y;
	for(int i=1;i<=20;i++)fa[i][x]=fa[i-1][fa[i-1][x]];
	for(int i=fi[x];i;i=la[i]){
		if(to[i]!=y)dfs(to[i],x);
	}
}
int lca(int x,int y){
	if(de[x]>de[y])swap(x,y);
	if(x==0)return y;
	for(int i=20;i>=0;i--){
		if(de[fa[i][y]]>=de[x])y=fa[i][y];
	}
	if(x==y)return x;
	for(int i=20;i>=0;i--){
		if(fa[i][x]!=fa[i][y])y=fa[i][y],x=fa[i][x];
	} 
	return fa[0][x];
}
void bt(int x,int l,int r){
	if(l==r){
		tr[x]=l;
		return;
	}
	int mid=(l+r)>>1;
	bt(x*2,l,mid);
	bt(x*2+1,mid+1,r);
	tr[x]=lca(tr[x*2],tr[x*2+1]);
}
int qry(int x,int l,int r,int ql,int qr){
	if(ql<=l&&qr>=r)return tr[x];
	int mid=(l+r)>>1,as=0;
	if(ql<=mid)as=qry(x*2,l,mid,ql,qr);
	if(qr>mid)as=lca(as,qry(x*2+1,mid+1,r,ql,qr));
	return as;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1,x,y;i<n;i++){
		scanf("%d%d",&x,&y);
		add(x,y);
		add(y,x);
	}
	scanf("%d",&m);
	dfs(1,0);
	if(n<=5000){
		for(int i=1;i<=n;i++){
			a[i][i]=i;
			for(int j=i-1;j>=1;j--)a[j][i]=lca(a[j+1][i],j);
		}
		for(int i=1,l,r,k;i<=m;i++){
			scanf("%d%d%d",&l,&r,&k);
			int ans=0;
			for(int j=l+k-1;j<=r;j++){
				ans=max(ans,de[a[j-k+1][j]]);
			}
			cout<<ans<<"\n";
		}
	}
	else{
		bt(1,1,n);
		for(int i=1,l,r,k;i<=m;i++){
			scanf("%d%d%d",&l,&r,&k);
			cout<<de[qry(1,1,n,l,r)]<<"\n";
		}
	}
	return 0;
}
