#include <bits/stdc++.h>
using namespace std;
#define ll long long
int n,q;
const int N=5e5+5;
vector<int> v[N];
int depth[N],dp[N][60];
int b[N<<2];

void dfs(int x,int fa){
	depth[x]=depth[fa]+1;
	dp[x][0]=fa;
	for(int i=1;i<=__lg(depth[x]);i++){
		dp[x][i]=dp[dp[x][i-1]][i-1];
	}
	for(auto y:v[x]){
		if(y!=fa){
			dfs(y,x);
		}
	}
}

int lca(int x,int y){
	if(depth[x]<depth[y])swap(x,y);
	while(depth[x]>depth[y]){
		x=dp[x][__lg(depth[x]-depth[y])];
	}
	if(x==y)return x;
	for(int i=__lg(depth[x]);i>=0;i--){
		if(dp[x][i]!=dp[y][i]){
			x=dp[x][i];
			y=dp[y][i];
		}
	}
	return dp[x][0];
}

void pushup(int rt){
	b[rt]=lca(b[rt<<1],b[rt<<1|1]);
}

void build(int l,int r,int rt){
	if(l==r){
		b[rt]=l;
		return ;
	}
	int m=(l+r)>>1;
	build(l,m,rt<<1);
	build(m+1,r,rt<<1|1);
	pushup(rt);
}

int query(int L,int R,int l,int r,int rt){
	if(L<=l&&r<=R){
		return b[rt];
	}
	int m=(l+r)>>1;
	if(L<=m&&R>m)return lca(query(L,R,l,m,rt<<1),query(L,R,m+1,r,rt<<1|1));
	if(L<=m)return query(L,R,l,m,rt<<1);
	return query(L,R,m+1,r,rt<<1|1);
}

int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0),cout.tie(0);
	cin >> n;
	for(int i=1;i<=n-1;i++){
		int x,y;
		cin >> x >> y;
		v[x].push_back(y);
		v[y].push_back(x); 
	}
	dfs(1,1);
	build(1,n,1);
	cin >> q;
	while(q--){
		int l,r,k;
		cin >> l >> r >> k;
		int ans=0;
		for(int i=l;i+k-1<=r;i++){
			ans=max(ans,depth[query(i,i+k-1,1,n,1)]);
		}
		cout<<ans<<"\n";
	}
	return 0;
}
