#include<bits/stdc++.h>
#define ll int
#define ls(x) (x<<1)
#define rs(x) (x<<1|1)
#define pb push_back
using namespace std;
ll n,q,u,v,st[500005][55],dep[500005],l,r,k,a[5005][5005],ans,tr[2000005];
vector<ll> d[500005];
void dfs(ll x,ll pre){
	dep[x]=dep[pre]+1,st[x][0]=pre;
	for(int i=0;i<d[x].size();i++){
		if(d[x][i]==pre) continue;
		dfs(d[x][i],x);
	}
	return;
}
ll LCA(ll a,ll b){
	if(dep[a]<dep[b]) swap(a,b);
	for(int i=30;i>=0;i--){
		if(dep[st[a][i]]>=dep[b]){
			a=st[a][i];
		}
	}
	if(a==b) return a;
	for(int i=30;i>=0;i--){
		if(st[a][i]!=st[b][i]){
			a=st[a][i];
			b=st[b][i];
		}
	}
	return st[a][0];
}
void pushup(ll x){
	tr[x]=max(tr[ls(x)],tr[rs(x)]); 
}
void build(ll x,ll l,ll r){
	if(l==r){
		tr[x]=dep[l];
		return;
	}
	ll mid=(l+r)>>1;
	build(ls(x),l,mid);
	build(rs(x),mid+1,r);
	pushup(x);
}
ll query(ll x,ll l,ll r,ll L,ll R){
	if(l>R||r<L) return 0;
	if(L<=l&&r<=R) return tr[x];
	ll mid=(l+r)>>1,sum=0;
	if(L<=mid) sum=max(query(ls(x),l,mid,L,R),sum);
	if(R>mid) sum=max(query(rs(x),mid+1,r,L,R),sum);
	return sum;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		scanf("%d%d",&u,&v);
		d[u].pb(v),d[v].pb(u);
	}
	dfs(1,0);
	if(n<=5000){
		for(int i=1;i<=30;i++){
			for(int j=1;j<=n;j++){
				st[j][i]=st[st[j][i-1]][i-1];
			}
		}
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				a[i][j]=dep[LCA(i,j)];
			} 
		}
		scanf("%d",&q);
		for(int i=1;i<=q;i++){
			scanf("%d%d%d",&l,&r,&k);
			ans=0;
			for(int j=l;j<=r;j++){
				for(int g=j+k-1;g<=r;g++){
					ans=max(a[j][g],ans);
				}
			}
			printf("%d\n",ans);
		}
	}
	else{
		cout<<1<<endl;
		build(1,1,n);
		cout<<1<<endl; 
		scanf("%d",&q);
		for(int i=1;i<=q;i++){
			scanf("%d%d%d",&l,&r,&k);
			ans=query(1,1,n,l,r);
			printf("%d\n",ans-1);
		}		
	}
	return 0;
}
