#include<bits/stdc++.h>
using namespace std;
int ct,n,q,to[1000005],last[1000005],head[1000005];
int f[500005][20],maxx;
int dep[500005],siz[500005],top[500005],son[500005],fa[500005];
void add(int u,int v){
	to[++ct]=v,last[ct]=head[u],head[u]=ct;
}
void dfs(int u,int ft){
	fa[u]=ft,dep[u]=dep[ft]+1,siz[u]=1;
	for(int i=head[u];i;i=last[i]){
		if(!dep[to[i]]){
			dfs(to[i],u);
			if(siz[to[i]]>siz[son[u]]) son[u]=to[i];
			siz[u]+=siz[to[i]];
		}
	}
}
void dfs2(int u,int rt){
	top[u]=rt;
	if(son[u]) dfs2(son[u],rt);
	for(int i=head[u];i;i=last[i])
		if(to[i]!=fa[u]&&to[i]!=son[u]) dfs2(to[i],to[i]);
}
int lca(int u,int v){
	if(u==0||v==0) return u|v;
	while(top[u]!=top[v]){
		if(dep[top[u]]>dep[top[v]]) u=fa[top[u]];
		else v=fa[top[v]];
	}
	if(dep[u]<dep[v]) return u;
	else return v;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	maxx=log2(n)+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),dfs2(1,1);
	for(int i=1;i<=n;i++) f[i][0]=i;
	for(int i=1;i<=maxx;i++){
		for(int j=1;j<=n;j++){
			f[j][i]=lca(f[j][i-1],f[j+(1<<(i-1))][i-1]);
		}
	}
	scanf("%d",&q);
	for(int i=1;i<=q;i++){
		int l,r,k,ans=-1e9;
		scanf("%d%d%d",&l,&r,&k);
		for(int j=l;;j++){
			if(j+k-1>r) break;
			int now=j,mb=j+k-1,sum=j;
			while(now<=mb){
				for(int x=maxx;x>=0;x--){
					if(now+(1<<x)-1<=mb){
						sum=lca(sum,f[now][x]);
						now+=(1<<x);
						break;
					}
				}
				if(dep[sum]<ans) break;
			}
			ans=max(ans,dep[sum]);
		}
		printf("%d\n",ans);
	}
}
