#include<bits/stdc++.h>
using namespace std;
const int N=5e3+10;
int n,q,l,r,x,y,dep[500001],id[N],cnt,f[N][20],p[N][N],k,P[500001][20];
vector<int>g[500001];
void dfs(int x,int fa){
	for(int i=0;f[x][i];i++) f[x][i+1]=f[f[x][i]][i];
	for(int i=0;i<g[x].size();i++){
		int j=g[x][i];
		if(j==fa) continue;
		dep[j]=dep[x]+1,f[j][0]=x;
		dfs(j,x);
	}
}
void dfs1(int x,int fa){
	for(int i=0;i<g[x].size();i++){
		int j=g[x][i];
		if(j==fa) continue;
		dep[j]=dep[x]+1;
		dfs1(j,x);
	}
}
int lca(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	int k=dep[x]-dep[y];
	for(int i=0;i<20;i++) if(k&(1<<i)) x=f[x][i];
	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];
}
int Min(int x,int y){
	if(dep[x]>dep[y]) return x;
	return y;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	if(n>=N){
		for(int i=1;i<n;i++){
			scanf("%d%d",&x,&y);
			g[x].push_back(y),g[y].push_back(x);
		}
		dep[1]=1;
		dfs1(1,0);
		for(int i=1;i<=n;i++) P[i][0]=dep[i];
		for(int j=1;j<=log2(n);j++){
			for(int i=1;i+(1<<j)-1<=n;i++){
				P[i][j]=max(P[i][j-1],p[i+(1<<j-1)][j-1]);
			}
		}
		scanf("%d",&q);
		while(q--){
			scanf("%d%d%d",&l,&r,&k);
			printf("1\n"); 
		}
		return 0;
	}
	for(int i=1;i<n;i++){
		scanf("%d%d",&x,&y);
		g[x].push_back(y),g[y].push_back(x);
	}
	dep[1]=1;
	dfs(1,0);
	scanf("%d",&q);
	for(int i=1;i<=n;i++){
		p[i][i]=i;
		for(int j=i+1;j<=n;j++) p[i][j]=lca(p[i][j-1],j);
	}
	while(q--){
		scanf("%d%d%d",&l,&r,&k);
		int ans=1;
		for(int i=l;i<=r-k+1;i++) ans=Min(ans,p[i][i+k-1]);
		printf("%d\n",dep[ans]); 
	}
	return 0;
}
