#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll n;
ll tot;
ll q[100010];
ll nxt[1000010];
ll head[100010];
ll f[50010][22];
ll lc[50010][22];
ll dep[100010];

ll pf[1000010];
ll lg[1000010];

void add(ll u,ll v){
	q[++tot]=v;
	nxt[tot]=head[u];
	head[u]=tot;
} 
void dfs(ll x,ll fa){
	dep[x]=dep[fa]+1;
	f[x][0]=fa;
	for(int i=1;i<=19;i++){
		f[x][i]=f[f[x][i-1]][i-1];
	}
	for(int i=head[x];i;i=nxt[i]){
		ll y=q[i];
		if(y==fa) continue ;
		dfs(y,x) ;
	}
}
ll lca(ll x,ll y){
	if(dep[x]<dep[y]) swap(x,y);
	for(int j=19;j>=0;j--){
		if(dep[x]-pf[j]>=dep[y]){
			x=f[x][j];
		}
	}
	if(x==y) return x;
	for(int i=19;i>=0;i--){
		if(f[x][i]!=f[y][i]){
			x=f[x][i];
			y=f[y][i];
		}
	}
	return f[x][0];
}
ll maxn(ll x,ll y){ return x>y?x:y; }
ll ask(ll x,ll y){
	ll p=lg[y-x+1];
	ll xs=lc[x][p];
	ll ys=lc[y-pf[p]+1][p];
	ll yy=lca(xs,ys);
	return dep[yy];
}
ll m;
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	
	scanf("%lld",&n);
	for(int i=1;i<n;i++){
		ll u,v;
		scanf("%lld%lld",&u,&v);
		add(u,v);add(v,u);
	}
	dfs(1,0);
	
	pf[0]=1;
	for(int i=1;i<=19;i++) pf[i]=pf[i-1]*2;
	for(int i=2;i<=n;i++) lg[i]=lg[i/2]+1;
	for(int i=1;i<=n;i++){
		lc[i][0]=i;
	}
	for(int j=1;j<=19;j++){
		for(int i=1;i<=n;i++){
			if(i+pf[j]-1<=n){
				lc[i][j]=lca(lc[i][j-1],lc[i+pf[j-1]][j-1]);
			}
		}
	}
//	for(int i=1;i<=1;i++){
//		printf("%lld %lld\n",lca(3,4),lc[3][1]);
//		printf("%lld %lld %lld\n",f[i][0],f[i][1],dep[i]) ;
//	}
	scanf("%lld",&m);
	for(int i=1;i<=m;i++){
		ll l,r,k;
		scanf("%lld%lld%lld",&l,&r,&k) ;
		ll mx=0;
		for(int j=l;j+k-1<=r;j++){
			mx=maxn(mx,ask(j,j+k-1));
		}
		printf("%lld\n",mx);
	}
}
