#include<bits/stdc++.h>
//#define int long long
using namespace std;
//const int inf=1e9+7;
int in(){
	int ans=0,f=1;
	char c=getchar();
	for(;!isdigit(c);c=getchar()) if(c=='-') f=-1;
	for(;isdigit(c);c=getchar()) ans=ans*10+c-'0';
	return ans*f;
}
void out(int x){
	if(x<0){
		x=-x;
		putchar('-'); 
	}
	if(x>=10) out(x/10);
	putchar(x%10+'0');
}
int n;
int fir[500010],ne[1000010],en[1000010],cnt;
void add(int u,int v){
	cnt++;
	ne[cnt]=fir[u];
	en[cnt]=v;
	fir[u]=cnt;
}
int f[500003][20],dep[500010];
int st[500003][20];
void dfs(int u,int fa){
	dep[u]=dep[fa]+1;
	f[u][0]=fa;
	for(int i=fir[u];i;i=ne[i]){
		int v=en[i];
		if(v!=fa){
			dfs(v,u);
		}
	}
}
void build(){
	for(int j=1;j<=19;j++){
		for(int i=1;i<=n;i++){
			f[i][j]=f[f[i][j-1]][j-1];
		}
	}
}
void build_st(){
	for(int i=1;i<=n;i++) st[i][0]=dep[i];
	for(int j=1;j<=19;j++){
		for(int i=1;i<=n;i++){
			if(i+(1<<j)-1<=n) st[i][j]=min(st[i][j-1],st[i+(1<<j-1)][j-1]);
		}
	}
}
int get(int l,int r){
	int t=log2(r-l+1);
	return min(st[l][t],st[r-(1<<t)+1][t]);
}
int lca(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	for(int j=19;j>=0;j--) if(dep[f[x][j]]>=dep[y]&&f[x][j]) x=f[x][j];
	if(x==y) return x;
	for(int j=19;j>=0;j--){
		if(f[x][j]!=f[y][j]&&dep[x]>(1<<j)){
			x=f[x][j];
			y=f[y][j];
		}
	}
	return f[x][0];
}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	n=in();
	for(int i=1;i<n;i++){
		int u=in(),v=in();
		add(u,v);
		add(v,u);
	}
	dfs(1,0);
	build();
	build_st(); 
	int q=in();
	while(q--){
		int l=in(),r=in(),k=in(),d=0;
		if(n<=5000||r-l+1==k){
			for(int i=l;i+k-1<=r;i++){
				int lc=i;
				for(int j=i+1;j<=i+k-1;j++){
					lc=lca(lc,j);
				}
				d=max(d,dep[lc]);
			}
			printf("%d\n",d);
		}
		else{
			for(int i=l;i+k-1<=r;i++){
				d=max(d,get(l,l+k-1));
			}
			out(d);
			putchar('\n');
		}
	}
	return 0;
}
