#include<bits/stdc++.h>
#define ll long long
#define pb push_back
#define mp make_pair
#define pii pair<int,int>
#define db double
using namespace std;

const int MAXX=5e5+10;
const int MAXL=21;
const int inf=1e9+10;

int n,Q;
vector<int> ed[MAXX];
int dep[MAXX],dfn[MAXX],cnt;
int in[MAXX],ou[MAXX];
int f[MAXX][MAXL];
void dfs(int p,int fa) {
	dfn[p]=in[p]=++cnt;
	f[p][0]=fa;
	dep[p]=dep[fa]+1;
	int len=ed[p].size();
	for(int i=0;i<len;i++) {
		int v=ed[p][i];
		if(v==fa) continue;
		dfs(v,p);
	}
	ou[p]=cnt;
}
struct Tree {
	int l,r,mi,ma,id1,id2;
}tr[MAXX<<2];
void pushup(int p) {
	if(tr[p].l==tr[p].r) return ;
	tr[p].mi=min(tr[p*2].mi,tr[p*2+1].mi);
	tr[p].ma=max(tr[p*2].ma,tr[p*2+1].ma);
	if(tr[p].mi==tr[p*2].mi) tr[p].id1=tr[p*2].id1;
	else tr[p].id1=tr[p*2+1].id1;
	if(tr[p].ma==tr[p*2].ma) tr[p].id2=tr[p*2].id2;
	else tr[p].id2=tr[p*2+1].id2;
}
void build(int p,int l,int r) {
	if(l>r) return ;
	tr[p]=(Tree){l,r,inf,-inf,0,0};
	if(l==r) {
		tr[p].mi=tr[p].ma=dfn[l];
		tr[p].id1=tr[p].id2=l;
		return ;
	}
	int mid=(l+r)>>1;
	build(p*2,l,mid),build(p*2+1,mid+1,r);
	pushup(p);
}
struct Data {
	int mi,ma,id1,id2;
};
Data ask(int p,int l,int r) {
	if(l<=tr[p].l&&tr[p].r<=r) return (Data){tr[p].mi,tr[p].ma,tr[p].id1,tr[p].id2};
	int mid=(tr[p].l+tr[p].r)>>1;
	Data le=(Data){inf,-inf,0,0},ri=(Data){inf,-inf,0,0};
	if(l<=mid) le=ask(p*2,l,r);
	if(mid<r) ri=ask(p*2+1,l,r);
	int mi=min(le.mi,ri.mi),ma=max(le.ma,ri.ma),id1=0,id2=0;
	if(mi==le.mi) id1=le.id1;
	else id1=ri.id1;
	if(ma==le.ma) id2=le.id2;
	else id2=ri.id2;
	return (Data){mi,ma,id1,id2};
}
int sans;
void init() {
	for(int j=1;j<MAXL;j++) {
		for(int i=1;i<=n;i++) f[i][j]=f[f[i][j-1]][j-1];
	}
}
int lca(int x,int y) {
	if(dep[x]!=dep[y]) {
		if(dep[x]<dep[y]) swap(x,y);
		for(int i=MAXL-1;i>=0;i--) {
			if(dep[f[x][i]]>=dep[y]) x=f[x][i];
		}
	}
	if(x==y) return x;
	for(int i=MAXL-1;i>=0;i--) {
		if(f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i];
	}
	return f[x][0];
}
void sol(int x,int y) {
	sans=max(sans,dep[lca(x,y)]);
}
signed main() {
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	for(int i=1,u,v;i<n;i++) cin>>u>>v,ed[u].pb(v),ed[v].pb(u);
	dfs(1,0);
	init();
	build(1,1,n);
	cin>>Q;
	while(Q--) {
		int l,r,k;
		cin>>l>>r>>k;
		sans=0;
		for(int i=l;i+k-1<=r;i++) {
			int j=i+k-1;
			Data p=ask(1,i,j);
			sol(p.id1,p.id2);
		}
		cout<<sans<<'\n';
	}

	return 0;
}
