#include<bits/stdc++.h>
using namespace std;
const int N=500005;
int n,Q;
int u,v;
vector<int> g[N];
struct Ques{
	int l,r,k;
}q[N];
int f[N][21];
int dep[N];
int siz[N],fsiz[N];
int Lg[N];
void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	f[u][0]=fa;
	siz[u]=1;
	for(int i=1;i<=Lg[dep[u]];i++) f[u][i]=f[f[u][i-1]][i-1];
	for(auto v:g[u])
		if(v^fa){
			dfs(v,u);
			siz[u]+=siz[v];
		}
	fsiz[u]=siz[u];
}
int st[21][N];
int LCA(int u,int v){
	if(dep[u]<dep[v]) swap(u,v);
	int t=dep[u]-dep[v];
	for(int i=Lg[dep[u]];~i;i--) 
		if(t&(1<<i)) u=f[u][i];
	if(u==v) return u;
	for(int i=Lg[dep[u]];~i;i--)
		if(f[u][i]^f[v][i])
			u=f[u][i],v=f[v][i];
	return f[u][0];
}
bool flgA,flgB;
int qry(int l,int r){
	int w=Lg[r-l+1];
	return LCA(st[w][l],st[w][r-(1<<w)+1]);
}
int a[N];
int qry2(int l,int r){
	int w=Lg[r-l+1];
	return min(st[w][l],st[w][r-(1<<w)+1]);
}
void SolveA(){
	for(int i=1;i<=n;i++) a[i]=dep[i];
	for(int i=1;i<=n;i++) st[0][i]=a[i];
	for(int i=1;i<=Lg[n];i++) 
		for(int j=1;j+(1<<i)-1<=n;j++)
			st[i][j]=min(st[i-1][j],st[i-1][j+(1<<(i-1))]);
	for(int i=1;i<=Q;i++){
		int ret=0;
		for(int j=q[i].l;j+q[i].k-1<=q[i].r;j++)
			ret=max(ret,qry2(j,j+q[i].k-1));
		printf("%d\n",ret);
	}
}
void SolveB(){
	for(int i=1;i<=Q;i++){
		int ret=dep[qry(q[i].l,q[i].r)];
		printf("%d\n",ret);
	}
}
void SolveC(){
	for(int i=1;i<=Q;i++){
		int ret=0;
		for(int j=q[i].l;j+q[i].k-1<=q[i].r;j++)
			ret=max(ret,dep[qry(j,j+q[i].k-1)]);
		printf("%d\n",ret);
	}
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&u,&v);
		g[u].push_back(v);
		g[v].push_back(u);
	} 
	for(int i=2;i<=n;i++) Lg[i]=Lg[i>>1]+1;
	scanf("%d",&Q);
	flgA=true; flgB=true;
	for(int i=1;i<=Q;i++) {
		scanf("%d%d%d",&q[i].l,&q[i].r,&q[i].k);
		flgB&=(q[i].r-q[i].l+1==q[i].k);
	}
	dfs(1,0);
	sort(fsiz+1,fsiz+n+1); 
	for(int i=1;i<=n;i++) flgA&=(fsiz[i]==i);
	for(int i=1;i<=n;i++) st[0][i]=i;
	for(int i=1;i<=Lg[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))]);
	if(flgB) return SolveB(),0;
	else if(n<=5000&&Q<=5000) return SolveC(),0;
	else if(flgA) return SolveA(),0;
	else SolveC();
	return 0;
}
/*
6
5 6
6 1 
6 2 
2 3 
2 4 
3 
2 5 2
1 4 1 
1 6 3
*/
