#include<bits/stdc++.h>
using namespace std;
int n,m,k,x,y,z;
int t[500005];
int head[500005];
int id;
struct node{
	int val,nxt;
}edge[1000005];
void add(int x,int y){
	edge[++id].val=y;
	edge[id].nxt=head[x];
	head[x]=id;
}
struct qwe{
	int dep,l,r;
}a[500005];
bool cmp(qwe a,qwe b){
	return a.dep<b.dep;
}
void dfs(int x){
	a[x].l=a[x].r=x;
	for(int i=head[x];i;i=edge[i].nxt){
		int y=edge[i].val;
		if(a[y].dep) continue;
		a[y].dep=a[x].dep+1;
		dfs(y);
		a[x].l=min(a[x].l,a[y].l);
		a[x].r=max(a[x].r,a[y].r);
	}
}
int ans;
bool check(int l,int r,int x){ 
	for(int i=t[x-1]+1;i<=t[x];i++){
		if(a[i].l<=l&&r<=a[i].r) return 1;
	}
	return 0;
}
int solve(int x,int y){
	int l=ans,r=k;
	while(l+1<r){
		int mid=l+r>>1;
		if(check(x,y,mid)){
			l=mid;
		}else{
			r=mid-1;
		}
	}
	if(check(x,y,r)) return r;
	return l;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin >> n;
	for(int i=1;i<n;i++){
		cin >> x >> y;
		add(x,y);
		add(y,x);
	}
	a[1].dep=1;
	dfs(1);
	sort(a+1,a+1+n,cmp);
	for(int i=1;i<=n;i++){
		if(a[i].dep!=a[i-1].dep){
			k++;
		}
		t[k]=i;
	}
	cin >> m;
	for(int i=1;i<=m;i++){
		cin >> x >> y >> z;
		ans=1;
		for(int j=x;j+z-1<=y;j++){
			ans=solve(j,j+z-1);
		}
		cout << ans << endl;
	}
	return 0;
}
