#include<bits/stdc++.h>
using namespace std;
const int N=5e5+10,M=2e7+10;
int n,q,x,y,k,tot,f,cnt,d[N],anc[N][25],st[25][N],Lg[N],rt[M];
struct A{
	int mxl,mxr,mx,ls,rs;
}tr[M];
vector<int>e[N];
int lca(int x,int y){
	if(d[x]<d[y]) swap(x,y);
	for(int i=20;i>=0;--i)
		if(d[anc[x][i]]>=d[y]) x=anc[x][i];
	if(x==y) return x;
	for(int i=20;i>=0;--i)
		if(anc[x][i]!=anc[y][i]) x=anc[x][i],y=anc[y][i];
	return anc[x][0];
}
void init(){
	for(int i=1;i<=n;++i) st[0][i]=i,Lg[i]=Lg[i>>1]+(i>1);
	for(int i=1;i<=20;++i)
		for(int j=1;j+(1<<i)-1<=n;++j) st[i][j]=lca(st[i-1][j],st[i-1][j+(1<<i-1)]);
}
int qst(int l,int r){
	int k=Lg[r-l+1];
	return lca(st[k][l],st[k][r-(1<<k)+1]);
}
void mrg(A &p,A x,A y,int l1,int r1,int l2,int r2){
	p={x.mxl+y.mxl*(x.mxl==r1-l1+1),y.mxr+x.mxr*(y.mxr==r2-l2+1),max(x.mxr+y.mxl,max(x.mx,y.mx)),p.ls,p.rs};
}
void upt(int x,int &y,int l,int r,int p){
	tr[y=++tot]=tr[x];
	if(l==r) return tr[y]={1,1,1},void();
	int mid=(l+r)>>1;
	if(p<=mid) upt(tr[x].ls,tr[y].ls,l,mid,p);
	else upt(tr[x].rs,tr[y].rs,mid+1,r,p);
	mrg(tr[y],tr[tr[y].ls],tr[tr[y].rs],l,mid,mid+1,r);
}
void dfs(int u,int fa){
	d[u]=d[fa]+1,anc[u][0]=fa;
	if(d[u]==n) f=1;
	for(int i=1;i<=20;++i) anc[u][i]=anc[anc[u][i-1]][i-1];
	for(int v:e[u])
		if(v!=fa) dfs(v,u);
	if(f) upt(rt[cnt-1],rt[cnt],1,n,u),++cnt;
}
A qry(int x,int l,int r,int ql,int qr){
	if(!x) return {0,0,0};
	if(ql<=l&&r<=qr) return tr[x];
	int mid=(l+r)>>1;A ans;
	if(qr<=mid) ans=qry(tr[x].ls,l,mid,ql,qr);
	else if(ql>mid) ans=qry(tr[x].rs,mid+1,r,ql,qr);
	else mrg(ans,qry(tr[x].ls,l,mid,ql,qr),qry(tr[x].rs,mid+1,r,ql,qr),l,mid,mid+1,r);
	return ans;
}
int main(){
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	cin>>n;
	for(int i=1;i<n;++i) scanf("%d%d",&x,&y),e[x].push_back(y),e[y].push_back(x);
	dfs(1,0),init();
	cin>>q;
	while(q--){
		scanf("%d%d%d",&x,&y,&k);
		if(f){
			int l=1,r=n;
			while(l<r){
				int mid=(l+r)>>1;
				if(qry(rt[mid],1,n,x,y).mx>=k) r=mid;
				else l=mid+1;
			}
			printf("%d\n",n-l);
		}
		else{
			int ans=0;
			for(int i=x;i+k-1<=y;++i) ans=max(d[qst(i,i+k-1)],ans);
			printf("%d\n",ans);
		}
	}
	return 0;
}
