#include <bits/stdc++.h>
using namespace std;
#define il inline
#define pb push_back
const int N=5e5+5;
int n;
vector<int> e[N];
int dep[N],par[21][N],MD;
int lg[N],st[21][N];
void dfs(int x,int fa) {
	dep[x]=dep[fa]+1;
	par[0][x]=fa;
	for(int i=1;i<=MD;i++) par[i][x]=par[i-1][par[i-1][x]];
	for(auto y:e[x]) {
		if(y==fa) continue;
		dfs(y,x);
	}
}
il int LCA(int x,int y) {
	if(dep[x]>dep[y]) swap(x,y);
	for(int i=MD;i>=0;i--) {
		if(dep[par[i][y]]>=dep[x]) y=par[i][y];
	}
	if(x==y) return x;
	for(int i=MD;i>=0;i--) {
		if(par[i][y]!=par[i][x])	
			x=par[i][x],y=par[i][y];
	}
	return par[0][x];
}
il int query(int l,int r) {
	int k=lg[r-l+1];
	return dep[LCA(st[k][l],st[k][r-(1<<k)+1])];
}
int main() {
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
	for(int i=1;i<n;i++) {
		int x,y;scanf("%d%d",&x,&y);
		e[x].pb(y),e[y].pb(x);
	}
	MD=__lg(n)+1;dfs(1,0);
	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)]);
		} 
	}
	int Q;scanf("%d",&Q);
	while(Q--) {
		int l,r,k;scanf("%d%d%d",&l,&r,&k);
		int ans=0;
		for(int i=l;i+k-1<=r;i++) ans=max(ans,query(i,i+k-1));
		printf("%d\n",ans);
	}
	return 0;
}
/*
zsyz&xwb rp++
*/
