#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;

int idx,head[maxn];
struct EDGE{ int v,next; }e[maxn*2];
void Insert(int u,int v){
	e[++idx]={v,head[u]};
	head[u]=idx;
}

int dep[maxn],fatr[maxn][23];
void Dfs(int x,int fa){
	dep[x]=dep[fa]+1;
	fatr[x][0]=fa;
	for(int i=0;i<20;i++)
		fatr[x][i+1]=fatr[fatr[x][i]][i];
	for(int i=head[x];i;i=e[i].next){
		int v=e[i].v;
		if(v!=fa) Dfs(v,x);
	}
}

int Get_lca(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=20;i>=0;i--)
		if(dep[fatr[x][i]]>=dep[y]) x=fatr[x][i];
	if(x==y) return x;
	for(int i=20;i>=0;i--)
		if(fatr[x][i]!=fatr[y][i]) x=fatr[x][i],y=fatr[y][i];
	return fatr[x][0];
}

int f[5003][5003];
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	int n; scanf("%d",&n);
	for(int i=1,x,y;i<n;i++){
		scanf("%d%d",&x,&y);
		Insert(x,y);
		Insert(y,x);
	}
	Dfs(1,1);
	if(n<=5000){
		for(int i=1;i<=n;i++)
			f[i][i]=i;
		for(int len=2;len<=n;len++)
			for(int i=1;i+len-1<=n;i++){
				int j=i+len-1;
				f[i][j]=Get_lca(f[i][j-1],j);
			}
		int q,l,r,k; scanf("%d",&q);
		while(q--){
			scanf("%d%d%d",&l,&r,&k);
			int ans=0;
			for(int i=l;i+k-1<=r;i++){
				int j=i+k-1;
				ans=max(ans,dep[f[i][j]]);
			}
			printf("%d\n",ans);
		}
		return 0;
	}
	int q,l,r,k; scanf("%d",&q);
	while(q--){
		scanf("%d%d%d",&l,&r,&k);
		int ans=0;
		for(int i=l;i+k-1<=r;i++){
			int j=i+k-1,res=0;
			for(int p=i;p<=j;p++){
				if(!res) res=p;
				else res=Get_lca(res,p);
			}
			ans=max(ans,dep[res]);
		}
		printf("%d\n",ans);
	}
	return 0;
}
