#include<bits/stdc++.h>
using namespace std;
namespace IO{
	void read(int &x){
		short f=1;x=0;char ch=getchar();
		while(ch<'0'||ch>'9'){if(ch=='-') f=-1;ch=getchar();}
		while(ch>='0'&&ch<='9') x=(x<<3)+(x<<1)+(ch^48),ch=getchar();
		x*=f;
		return;
	}
	void out(int x){
		if(x<0) putchar('-'),x=-x;
		if(x>9) out(x/10);
		putchar(x%10+'0');
		return;
	}
	void endl(){
		putchar('\n');
		return;
	}
}
using IO::read;
using IO::out;
using IO::endl;
const int N=1000005;
int n,q,dep[N],f[N][20],dp[N][20];
int e[N],ls[N],nx[N],em;
void insert(int x,int y){
	e[++em]=y,nx[em]=ls[x],ls[x]=em;
	return;
}
int lca(int x,int y){
	if(dep[x]<dep[y]) swap(x,y);
	for(int i=19;i>=0;i--) 
		if(dep[f[x][i]]>=dep[y]) x=f[x][i];
	if(x==y) return x;
	else{
		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];
	}
}
void dfs(int x,int fa){
	f[x][0]=fa;
	for(int i=1;f[f[x][i-1]][i-1];i++) f[x][i]=f[f[x][i-1]][i-1]; 
	dep[x]=dep[fa]+1;
	for(int i=ls[x];i;i=nx[i]){
		int u=e[i];
		if(u!=fa){
			dfs(u,x);
		}
	}
	return;
}
int ask(int l,int r){
	int k=log2(r-l+1);
	return lca(dp[l][k],dp[r-(1<<k)+1][k]);
}
void solve(int l,int r,int k){
	int maxn=0;
	for(int i=l;i<=r-k+1;i++){
		maxn=max(maxn,dep[ask(i,i+k-1)]);
	}
	out(maxn),endl();
	return;
}
signed main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	read(n);
	for(int i=1;i<n;i++){
		int x,y;
		read(x),read(y);
		insert(x,y),insert(y,x);
	}
	dfs(1,0);
	for(int i=n;i>=1;i--){
		dp[i][0]=i;
		for(int j=1;i+(1<<j)-1<=n;j++){
			dp[i][j]=lca(dp[i][j-1],dp[i+(1<<(j-1))][j-1]);
		}
	}
	read(q);
	for(int i=1;i<=q;i++){
		int l,r,k;
		read(l),read(r),read(k);
		solve(l,r,k);
	}
	return 0;
}
