#include <queue>
#include <bits/stdc++.h>
typedef long long LL;
LL ru(){
	LL ret=0,c=getchar();
	while(c<'0'||c>'9')c=getchar();
	for(;c>='0'&&c<='9';c=getchar()){ret=ret*10+(c&15);}
	return ret;
}

struct EDGE{
	int to,nxt;
}E[1200500];
int G[600500],H[600500],STf[600500][21],STC[600500][21];//stC:LCA
LL N,Ep=1;

#define LOGu(n) (63-__builtin_clzll(n))
void BFS_ST(){
	//BFS
	std::queue<int> Q;
	Q.push(1);
	H[1]=1;
	while(Q.size()){
		int p=Q.front();Q.pop();
		for(int e=G[p];e;e=E[e].nxt){
			if(!H[E[e].to]){
				H[E[e].to]=H[p]+1;
				STf[E[e].to][0]=p;
				Q.push(E[e].to);
			}
		}
	}
	//STf
	for(int i=1;i<=20;i++){
		for(int p=1;p<=N;p++){
			STf[p][i]=STf[STf[p][i-1]][i-1];
		}
	}
}
int LCA(int a,int b){
	if(H[a]<H[b])std::swap(a,b);//A deeper
	for(int i=20;i>=0;i--){
		if(H[STf[a][i]]>=H[b])a=STf[a][i];
	}//H same
	if(a==b)return a;
	for(int i=20;i>=0;i--){
		if(STf[a][i]!=STf[b][i])a=STf[a][i],b=STf[b][i];
	}
	return STf[a][0];
}
void ST2(){
	for(int p=1;p<=N;p++){
		STC[p][0]=p;
	}
	for(int i=1;i<=20;i++){
		for(int p=1;p<=N;p++){
			if(p+(1<<(i-1))<=N)//!!!
			STC[p][i]=LCA(STC[p][i-1],
							STC[p+(1<<(i-1))][i-1]);
		}
	}
}
inline int askC(int l,int k){
	int e=LOGu(k);
	return LCA(STC[l][e],STC[l+k-(1<<e)][e]);
}
int main(){
#ifndef _DEBUG
	freopen("query.out","w",stdout);
#endif
	freopen("query.in","r",stdin);
	N=ru();
	for(int i=N-1;i;i--){
		LL u=ru(),v=ru();
#define ADDEDGE(u,v) E[Ep].nxt=G[u];G[u]=Ep;E[Ep].to=v;Ep++
		ADDEDGE(u,v);
		ADDEDGE(v,u);
	}
	BFS_ST();
	ST2();
	LL q=ru();
if(N*q<=5000*5000){
	while(q--){
		LL l=ru(),r=ru(),k=ru(),ans=-1;
		for(int i=l;i<=r-k+1;i++){
			ans=std::max<LL>(ans,H[askC(i,k)]);
		}
		printf("%lld\n",ans);
	}
	return 0;
}else{
	int h=-1;
	for(int i=1;i<=N;i++){
		h=std::max(h,H[i]);
	}
if(h==N){
	while(q--){
		LL l=ru(),r=ru(),k=ru();
		printf("%d\n",H[askC(l,r-l+1)]);
	}
	return 0;
}else{
	std::mt19937_64 rd_(N*E[2].nxt*E[15].to);
	while(q--){
		LL l=ru(),r=ru(),k=ru();
		if(k==r-l+1)printf("%d\n",H[askC(l,k)]);
		else{
			LL ans=-1;
			std::uniform_int_distribution<long long> rd(l,r-k+1);
			for(int i=10;i;i--){
				ans=std::max<LL>(ans,H[askC(rd(rd_),k)]);
				ans=std::max<LL>(ans,H[askC(rd(rd_),k)]);
				ans=std::max<LL>(ans,H[askC(rd(rd_),k)]);
				ans=std::max<LL>(ans,H[askC(rd(rd_),k)]);
			}
			printf("%lld\n",ans);
		}
	}
	return 0;
}
}
}
