#include<bits/stdc++.h>
using namespace std;
const int N=5e5+1,M=20;
int n,Q;
int head[N],tot,dep[N],f[N][M],ans,lc,l,r,K,p;
priority_queue<pair<int,int> >q;
struct edge{
	int to,nxt;
}e[N*2];
void add(int u,int v){
	e[++tot].to=v,e[tot].nxt=head[u],head[u]=tot;
}
void dfs(int u,int fa){
	for(int i=head[u];i;i=e[i].nxt){
		int v=e[i].to;
		if(v==fa) continue;
		f[v][0]=u,dep[v]=dep[u]+1;
		for(int i=1;i<M;i++)
			f[v][i]=f[f[v][i-1]][i-1];
		dfs(v,u);
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y])swap(x,y);
	for(int i=M-1;i>=0;--i)
		if(dep[f[x][i]]>=dep[y])
			x=f[x][i];
	if(x==y)
		return x;
	for(int i=M-1;i>=0;i--)
		if(f[x][i]!=f[y][i])
			x=f[x][i],y=f[y][i];
	return f[x][0];
}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		int u,v;
		scanf("%d%d",&u,&v),add(u,v),add(v,u);
	}
	scanf("%d",&Q);
	dep[1]=1,dfs(1,0);
	if(n<=5000){
		for(int i=1;i<=Q;i++){
			scanf("%d%d%d",&l,&r,&K),ans=0;
			for(int j=l;j+K-1<=r;j++){
				lc=j;
				for(int k=j+1;k<=j+K-1;k++)
					lc=lca(lc,k);
				ans=max(ans,dep[lc]);
			}
			printf("%d\n",ans);
		}
	}
	else{
		for(int i=1;i<=Q;i++){
			scanf("%d%d%d",&l,&r,&K),ans=0;
			for(p=l;p<=l+K-1;p++)
				q.push({dep[p],p});
			ans=q.top().first; 
			while(p<=r){
				l++;
				while(q.top().second<l)q.pop();
				q.push({dep[p],p}),p++;
				ans=max(ans,q.top().first);
			}
			printf("%d\n",ans);
		}
	}
	return 0;
}
