#include<bits/stdc++.h>
using namespace std;

struct Struct_IO {
	#define FileNaME "query"
	Struct_IO(){
		freopen(FileNaME ".in", "r", stdin);
		freopen(FileNaME ".out", "w", stdout);
	}
	~Struct_IO(){
		fclose(stdin);
		fclose(stdout);
	}
} io_io;
#define N 500005
int n;

int fa[N] = {};
void add(int u, int v){
	if(u==v)return;
	if(u>v)swap(u,v);
	if(fa[v]==0){
		fa[v]=u;
		return;
	}
	if(fa[u]==0&&u!=1){
		fa[u]=v;
		return;
	}
	int p=v; int pf=fa[p]; int pff=fa[pf];
	fa[v]=u;
	while(pff){
		fa[pf]=p;
		p=pf;pf=pff;pff=fa[pff];
	}
	fa[pf]=p;
	return;
}

int deep[N]={};
void set_deep(int i){
	if(i==1){
		deep[1]=1;
		return;
	}
	if(deep[i])return;
	set_deep(fa[i]);
	deep[i]=deep[fa[i]]+1;
}

#define NL 22
int ff[N][NL]={};
void set_ff(int i){
	if(i==1)return;
	
	if(ff[i][0])return;
	
	set_ff(fa[i]);
	ff[i][0]=fa[i];
	for(int p=1;p<NL;p++){
		if(ff[i][p-1]==0)break;
		ff[i][p] = ff[ff[i][p-1]][p-1];
	}
}

void out(int i){
	if(i==0){
		printf("/\n");
		return;
	}
	printf("%d-", i);
	out(fa[i]);
}

int lowbit(int x){
	return x&(-x);
}

int log__2my[N];
void initlog(int n){
	log__2my[1]=0;
	for(int i=2;i<n;i++){
		log__2my[i]=log__2my[i>>1]+1;
	}
}

int lca(int x, int y){
	if(deep[x]<deep[y])swap(x,y);
	
	//deep[x]>=deep[y]
	int d = deep[x]-deep[y];
	while(d){
		int dx = lowbit(d);
		d-=dx;
		x=ff[x][log__2my[dx]];
	}
	if(x==y)return x;
	for(int i=0;i<n;i++){
		int p;
		for(p=0; p<NL; p++){
			if(ff[x][p]!=ff[y][p])continue;
			break;
		}
		if(p==0){
			x = ff[x][0];y = ff[y][0];
			return x==0? 1:x;
		}
		x = ff[x][p-1];y = ff[y][p-1];
	}
	return 1;
}

int st[N][NL];//[i, i+2^p)

inline int po(int x){
	return 1<<x;
}

void set_st(){
	for(int i=0;i<=n;i++){
		st[i][0]=i;
	}
	for(int p=1; p<NL; p++)for(int i=0;i<=n;i++){
		st[i][p] = lca(st[i][p-1], st[i+po(p-1)][p-1]);
	}
}
int getlca(int l,int r){
	if(l+1==r)return l;
	int p = log__2my[r-l]-1;
	return lca(st[l][p], st[r-po(p)][p]);
}

int main(){
	cin>>n;
	for(int i=1;i<n;i++){
		int u,v;
		cin>>u>>v;
		add(u,v);
	}
	initlog(N);
	/*for(int i=1;i<=n;i++){
		out(i);
	}*/
	for(int i=1;i<=n;i++){
		set_deep(i);
	}
	for(int i=1;i<=n;i++){
		set_ff(i);
	}
	/*for(int i=1;i<=n;i++){
		printf("%d(%d):",i, deep[i]);
		for(int p=0;p<NL;p++){
			if(ff[i][p]==0)break;
			printf("%d~", ff[i][p]);
		}
		printf("/\n");
	}*/
	
	set_st();
	
	/*for(int i=1;i<=n;i++){
		for(int p=0; p<NL; p++){
			printf("%d ",st[i][p]);
		}
		printf("\n");
	}*/
	int q;
	cin>>q;
	for(int i=0;i<q;i++){
		int l,r,k;
		cin>>l>>r>>k;
		int res=0;
		for(int i=l; i+k-1<=r; i++){
			res=max(res, deep[getlca(i,i+k)]);
		}
		cout<<res<<endl;
	}
	
	return 0;
}
