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

const int MA=5e6+10;
int q, n;
int l, r, k;
struct nd{
	int f, d;
	vector<int> s;
}t[MA];
int st[MA][20];

//
int mxd=-1;
void dfs(int pos, int fa, int dpt){
	if(dpt>mxd) mxd=dpt;
	t[pos].f=fa;
	t[pos].d=dpt;
	for(int i=0;i<t[pos].s.size();i++){
		if(t[pos].s[i]==fa) t[pos].s[i]=0;
		else{
			dfs(t[pos].s[i], pos, dpt+1);
		}
	}
}

void init(){
	for(int j=1;j<=n;j++){
		st[j][0]=t[j].f;
	}
	int lgd=log(mxd)/log(2);
	for(int i=1;i<=lgd;i++){
		for(int j=1;j<=n;j++){
			if(t[j].d-(1<<i)>0) st[j][i]=st[st[j][i-1]][i-1];
		}
	}
}

int lca(int a, int b){
	if(t[a].d>t[b].d){
		for(int i=log(t[a].d)/log(2)+1;i>=0;i--){
			if(t[a].d-(1<<i)<t[b].d) continue;
			a=st[a][i];
			if(t[a].d==t[b].d) break;
		}
		//a=;
	}
	else if(t[a].d<t[b].d){
		for(int i=log(t[b].d)/log(2)+1;i>=0;i--){
			if(t[b].d-(1<<i)<t[a].d) continue;
			b=st[b][i];
			if(t[a].d==t[b].d) break;
		}
		//b=t[b].f;
	}
	if(a==b) return a;
	for(int i=log(t[b].d)/log(2)+1;i>=0;i--){
		if(t[b].d-(1<<i)<=0||st[a][i]==st[b][i]) continue;
		a=st[a][i]; b=st[b][i];
	}
	//printf("%d %d: %d\n",oa, ob, t[a].f);
	return t[a].f;
}

int srch20(int l, int r, int k){
	int rt=-1;
	for(int i=0;i<=r-k;i++){
		int ll=l+i, rr=l+i+k-1;
		int cbm=lca(ll,ll+1);
		for(int j=ll+2;j<=rr;j++){
			cbm=lca(cbm,j);
		}
		if(t[cbm].d>rt) rt=t[cbm].d;
	}
	return rt;
}

//Special A
int minn(int a, int b){
	return a<b? a:b;
}

int s[MA][30];
void create_st(){
	int lgl=log(n)/log(2);
	for(int j=1;j<=n;j++){
		s[j][0]=t[j].d;
	}
	for(int i=1;i<=lgl;i++){
		for(int j=1;j<=n-(1<<i)+1;j++){
			s[j][i]=minn(s[j][i-1],s[j+(1<<(i-1))][i-1]);
		}
	}
}

int srchST(int l, int r){
	int lgl=log(r-l+1)/log(2); //?
	return minn(s[l][lgl],s[r-(1<<lgl)+1][lgl]);
}

int main(){
	//
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	//
	scanf("%d",&n);
	for(int i=1;i<n;i++){
		int a, b;
		scanf("%d%d",&a, &b);
		t[a].s.push_back(b);
		t[b].s.push_back(a);
	}
	dfs(1, 0, 1);
	scanf("%d",&q);
	if(n<=5000){
		init();
		for(int ii=1;ii<=q;ii++){
			scanf("%d%d%d",&l,&r,&k);
			if(k>1) printf("%d\n",srch20(l, r, k));
			else{
				int mx20=-1;
				for(int i=l;i<=r;i++){
					if(t[i].d>mx20) mx20=t[i].d;
				}
				printf("%d\n",mx20);
			}
		}
	}
	else{
		create_st();
		for(int ii=1;ii<=q;ii++){
			scanf("%d%d%d",&l,&r,&k);
			int mxST=-1;
			if(k==1){
				for(int i=l;i<=r;i++){
					if(t[i].d>mxST){
						mxST=t[i].d;
					}
				}
				printf("%d\n",mxST);
			}
			else{
				for(int i=0;i<=r-k;i++){
					int ll=l+i, rr=l+i+k-1;
					int tmp=srchST(ll,rr);
					if(tmp>mxST) mxST=tmp;
				}
				printf("%d\n",mxST);
			}
		}
	}
	return 0;
}
