#include <bits/stdc++.h>
#define pb push_back
#define fi first
#define se second
using namespace std; bool MEM;
using ll=int; using ld=long double;
using pii=pair<int,int>; using pll=pair<ll,ll>;
void rd(ll &x) {
	char c;
	while (c=getchar(),!('0'<=c&&c<='9'));
	x=c-'0';
	while (c=getchar(),'0'<=c&&c<='9') x=x*10+c-'0';
}
const int I=1e9;
const ll J=1e9,N=5e5+7,K=20;
mt19937 dnr(time(0));
ll rnd(ll l,ll r) { return dnr()%(r-l+1)+l; }
ll n,q,dep[N];
ll dfn[N],co[N],fa[N],sd[K][N],cnn;
vector<ll> e[N];
ll get(ll x,ll y) { return dfn[x]<dfn[y]?x:y; }
void dfs(ll p,ll f) {
	dfn[p]=++cnn,co[cnn]=p,fa[p]=f,sd[0][cnn]=f,dep[p]=dep[f]+1;
	for (ll i=1,j=cnn-1;j>0;j-=1ll<<i,i++) sd[i][j]=get(sd[i-1][j],sd[i-1][j+(1ll<<i-1)]);
	for (ll i:e[p]) if (i!=f) dfs(i,p);
}
ll lca(ll x,ll y) {
	if (x==y) return x;
	if ((x=dfn[x])>(y=dfn[y])) swap(x,y);
	return get(sd[__lg(y-x)][x+1],sd[__lg(y-x)][y-(1ll<<__lg(y-x))+1]);
}
struct st {
	ll tx[K][N],tn[K][N];
	void ini(ll n,ll *a) {
		for (ll i=1;i<=n;i++) tx[0][i]=tn[0][i]=a[i];
		for (ll i=1;i<K;i++) for (ll j=1;j+(1ll<<i)-1<=n;j++)
			tx[i][j]=max(tx[i-1][j],tx[i-1][j+(1ll<<i-1)]),
			tn[i][j]=min(tn[i-1][j],tn[i-1][j+(1ll<<i-1)]);
	}
	pll que(ll l,ll r) {
		ll s=__lg(r-l+1);
		return {min(tn[s][l],tn[s][r-(1ll<<s)+1]),max(tx[s][l],tx[s][r-(1ll<<s)+1])};
	}
} T;
//struct sgt {
//	ll t[N<<2];
//	void pup(ll p) { t[p]=lca(t[p<<1],t[p<<1|1]); }
//	void ini(ll p=1,ll l=1,ll r=n) {
//		if (l==r) return t[p]=l,void();
//		ll mid=l+r>>1;
//		ini(p<<1,l,mid),ini(p<<1|1,mid+1,r),pup(p);
//	}
//	ll que(ll x,ll y,ll p=1,ll l=1,ll r=n) {
//		if (x<=l&&r<=y) return t[p];
//		ll mid=l+r>>1;
//		if (y<=mid) return que(x,y,p<<1,l,mid);
//		else if (x>mid) return que(x,y,p<<1|1,mid+1,r);
//		else return lca(que(x,y,p<<1,l,mid),que(x,y,p<<1|1,mid+1,r));
//	}
//} T;
namespace solve1 {
	struct sgt {
		ll t[N<<2];
		void pup(ll p) { t[p]=max(t[p<<1],t[p<<1|1]); }
		void chn(ll x,ll z,ll p=1,ll l=1,ll r=n) {
			if (l==r) return t[p]=z,void();
			ll mid=l+r>>1;
			if (x<=mid) chn(x,z,p<<1,l,mid);
			else chn(x,z,p<<1|1,mid+1,r);
			pup(p);
		}
		ll que(ll x,ll y,ll p=1,ll l=1,ll r=n) {
			if (x<=l&&r<=y) return t[p];
			ll mid=l+r>>1,ret=0;
			if (x<=mid) ret=que(x,y,p<<1,l,mid);
			if (y>mid) ret=max(ret,que(x,y,p<<1|1,mid+1,r));
			return ret;
		}
	} T;
	struct qu { ll l,r,k,p; } b[N];
	ll qb[N],qq[N],ans[N];
	ll st[N],tp;
	ll qbl[N],qbr[N],qql[N],qqr[N];
	void dac(ll l,ll r,ll bl,ll br,ll ql,ll qr) {
//		printf("-----\n%d %d %d %d %d %d\n",l,r,bl,br,ql,qr);
//		for (ll i=bl;i<=br;i++) printf("%d  ",qb[i]); printf("\n");
//		for (ll i=ql;i<=qr;i++) printf("%d  ",qq[i]); printf("\n");
		if (ql>qr) return;
		if (l==r) {
			for (ll i=ql;i<=qr;i++) ans[qq[i]]=l;
			return;
		}
		ll mid=l+r>>1,qb1=0,qb2=0,qq1=0,qq2=0;
		tp=0;
		for (ll i=bl;i<=br;i++) {
			if (dep[qb[i]]>mid) st[++tp]=qb[i],qbr[++qb2]=qb[i];
			else qbl[++qb1]=qb[i];
		}
		sort(st+1,st+tp+1);
		for (ll i=tp,now=0;i;i--) {
			if (i==tp||st[i+1]!=st[i]+1) now=1;
			else now++;
			T.chn(st[i],now);
//			printf(" %d %d\n",st[i],now); 
		}
		for (ll i=ql;i<=qr;i++) {
			ll x=qq[i];
			if (T.que(b[x].l,b[x].r-b[x].k+1)>=b[x].k) qqr[++qq2]=x;
			else qql[++qq1]=x;
		}
		for (ll i=bl;i<bl+qb1;i++) qb[i]=qbl[i-bl+1];
		for (ll i=bl+qb1;i<=br;i++) qb[i]=qbr[i-bl-qb1+1];
		for (ll i=ql;i<ql+qq1;i++) qq[i]=qql[i-ql+1];
		for (ll i=ql+qq1;i<=qr;i++) qq[i]=qqr[i-ql-qq1+1];
		dac(l,mid,bl,bl+qb1-1,ql,ql+qq1-1);
		for (ll i=1;i<=tp;i++) T.chn(st[i],0);
		dac(mid+1,r,bl+qb1,br,ql+qq1,qr);
	}
	void mian() {
		rd(q);
		for (ll i=1;i<=n;i++) qb[i]=i;
		for (ll i=1;i<=q;i++) rd(b[i].l),rd(b[i].r),rd(b[i].k),b[i].p=i,qq[i]=i;
		dac(1,n,1,n,1,q); 
		for (ll i=1;i<=q;i++) cout<<ans[i]<<"\n";
	}
}
void mian() {
	rd(n);
//	n=100000;
	for (ll i=1,x,y;i<n;i++)
		rd(x),rd(y),
//		x=rnd(1,i),y=i+1,
		e[x].pb(y),e[y].pb(x);
	dfs(1,0);
	T.ini(n,dfn);
//	for (ll i=1;i<=n;i++) printf("%d ",dep[i]); printf("\n");
//	if (*max_element(dep+1,dep+n+1)==n) return solve1::mian();
	rd(q);
//	q=100000;
	for (ll o=1,l,r,x;o<=q;o++) {
		rd(l),rd(r),rd(x);
//		r=rnd(1,n),l=rnd(1,n-r+1),r=l+r-1,x=rnd(1,r-l+1);
		ll ans=0;
		for (ll i=l;i<=r-x+1;i++) {
			pll w=T.que(i,i+x-1);
			ans=max(ans,dep[lca(co[w.fi],co[w.se])]);
		}
		cout<<ans<<"\n";
	}
}
bool ORY; int main() {
//	freopen("query1.in","r",stdin);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
//	while (1)
//	int t; for (scanf("%d",&t);t--;)
	mian();
	cerr<<"\n"<<abs(&MEM-&ORY)/1048576<<"MB";
	return 0; 
}
/*
6
1 5
5 2
2 3
3 6
6 4
4
1 4 2
1 5 3
2 6 4
3 6 2

4
3
2
4
*/
