#include<bits/stdc++.h>
using namespace std;
const int maxn=5e5+5;
int n,q,deg[maxn];
struct edge{
	int to,nxt;
}e[maxn<<1];
int head[maxn],cnt_edge;
void add_edge(int from,int to){
	e[++cnt_edge]={to,head[from]},head[from]=cnt_edge;
}int dep[maxn],lg[maxn],st[25][maxn];


void solve_A_init(int fa,int now){
	dep[now]=dep[fa]+1;
	for(int i=head[now];i;i=e[i].nxt){
		if(e[i].to==fa){
			continue;
		}solve_A_init(now,e[i].to);
	}
}void solve_A_init_st(){
	lg[1]=0;
	for(int i=2;i<maxn;i++){
		lg[i]=lg[i>>1]+1;
	}for(int i=1;i<=n;i++){
		st[0][i]=dep[i];
	}for(int i=1;(1<<i)<=n;i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			st[i][j]=max(st[i-1][j],st[i-1][j+(1<<i-1)]);
		}
	}
}int solve_A_query(int l,int r){
	if(l>r){
		return 0;
	}const int tmp=lg[r-l+1];
	return max(st[tmp][l],st[tmp][r-(1<<tmp)+1]);
}void solve_A(){
	solve_A_init(0,1);
	scanf("%d",&q);
	while(q--){
		int l,r;
		scanf("%d%d%*d",&l,&r);
		printf("%d\n",solve_A_query(l,r));
	}
}


int fa[25][maxn];
void init_LCA(int now){
	dep[now]=dep[fa[0][now]]+1;
	for(int i=head[now];i;i=e[i].nxt){
		if(e[i].to==fa[0][now]){
			continue;
		}fa[0][e[i].to]=now;
		for(int j=1;j<=20;j++){
			fa[j][e[i].to]=fa[j-1][fa[j-1][e[i].to]];
		}init_LCA(e[i].to);
	}
}int LCA(int u,int v){
	if(dep[u]<dep[v]){
		swap(u,v);
	}for(int i=20;i>=0;i--){
		if(dep[fa[i][u]]>=dep[v]){
			u=fa[i][u];
		}
	}if(u==v){
		return u;
	}for(int i=20;i>=0;i--){
		if(fa[i][u]!=fa[i][v]){
			u=fa[i][u],v=fa[i][v];
		}
	}return fa[0][u];
}void init_st(){
	lg[1]=0;
	for(int i=2;i<maxn;i++){
		lg[i]=lg[i>>1]+1;
	}for(int i=1;i<=n;i++){
		st[0][i]=i;
	}for(int i=1;(1<<i)<=n;i++){
		for(int j=1;j+(1<<i)-1<=n;j++){
			st[i][j]=LCA(st[i-1][j],st[i-1][j+(1<<i-1)]);
		}
	}
}int query(int l,int r){
	if(l>r){
		return 0;
	}const int tmp=lg[r-l+1];
	return LCA(st[tmp][l],st[tmp][r-(1<<tmp)+1]);
}signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1,u,v;i<n;i++){
		scanf("%d%d",&u,&v);
		add_edge(u,v);
		add_edge(v,u);
		++deg[u],++deg[v];
	}int A=0;
	for(int i=1;i<=n;i++){
		if(deg[i]!=2){
			++A;
		}
	}if(A==2){
		solve_A();
	}init_LCA(1);
	init_st();
	scanf("%d",&q);
	while(q--){
		int l,r,len;
		scanf("%d%d%d",&l,&r,&len);
		int ans=0;
		for(int i=l;i+len-1<=r;i++){
			ans=max(ans,dep[query(i,i+len-1)]);
		}printf("%d\n",ans);
	}return 0;
}
