#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#define ll long long
#define db double
using namespace std;
const int inf=0x3f3f3f3f;
const ll lnf=1e18+10;
const db eps=1e-6;
ll read() {
	ll o=0,w=1;char c=getchar();
	while(c<'0'||c>'9') {if(c=='-') w=-1;c=getchar();}
	while(c>='0'&&c<='9') {o=o*10+c-'0';c=getchar();}
	return o*w;
}
namespace dada {

const int N=5e5+10,lgN=20;
int n,q;
vector<int> e[N];
int dep[N];
void dfs(int x,int fa) {
	dep[x]=dep[fa]+1;
	for(int v:e[x]) if(v!=fa) dfs(v,x);
}
namespace LCA {
	int in[N],st[N*2][lgN],lg[N*2],timer;
	void dfs(int x,int fa) {
		st[0][in[x]=++timer]=x;
		for(int v:e[x]) if(v!=fa) {
			dfs(v,x);
			st[0][++timer]=x;
		}
	}
	void init() {
		dfs(1,0);
		for(int i=2;i<=timer;i++) lg[i]=lg[i>>1]+1;
		for(int j=1;j<=lg[timer];j++) {
			for(int i=1;i+(1<<j)-1<=timer;i++) {
				if(dep[st[j-1][i]]<dep[st[j-1][i+(1<<(j-1))]]) st[j][i]=st[j-1][i];
				else st[j][i]=st[j-1][i+(1<<(j-1))];
			}
		}
	}
	int lca(int x,int y) {
		int l=in[x],r=in[y];
		if(l>r) swap(l,r);
		int g=lg[r-l+1];
		if(dep[st[g][l]]<dep[st[g][r-(1<<g)+1]]) return st[g][l];
		else return st[g][r-(1<<g)+1];
	}
}
int st[lgN][N],lg[N];
void init() {
	dfs(1,0);
	LCA::init();
	for(int i=2;i<=n;i++) lg[i]=lg[i>>1]+1;
	for(int i=1;i<=n;i++) st[0][i]=i;
	for(int j=1;j<lgN;j++) {
		for(int i=1;i+(1<<j)-1<=n;i++) {
			// if(j==1&&i==4) cerr<<"deb "<<st[j-1][i+(1<<j)-1]<<'\n';
			st[j][i]=LCA::lca(st[j-1][i],st[j-1][i+(1<<(j-1))]);
		}
	}
}
int query(int l,int r) {
	int g=lg[r-l+1];
	return LCA::lca(st[g][l],st[g][r-(1<<g)+1]);
}
int Main() {
	n=read();
	for(int x,y,i=1;i<n;i++) {
		x=read(),y=read();
		e[x].emplace_back(y);
		e[y].emplace_back(x);
	}
	init();
	// cerr<<"deb1 "<<LCA::lca(4,5)<<'\n';
	// cerr<<"deb "<<st[1][1]<<' '<<st[1][4]<<'\n';
	for(int i=1;i<=n;i++) {
		for(int j=0;j<10;j++) cerr<<st[j][i]<<' ';
		cerr<<'\n';
	}
	// for(int j=0;j<4;j++) {
	// 	for(int i=1;i+(1<<j)-1<=n;i++) cerr<<st[j][i]<<' ';
	// 	cerr<<'\n';
	// }
	// cerr<<"OK\n";
	q=read();
	for(int l,r,k,te=1;te<=q;te++) {
		// cerr<<te<<":\n";
		l=read(),r=read(),k=read();
		int ans=0;
		for(int i=l;i+k-1<=r;i++) {
			int g=i;
			for(int j=i;j<=i+k-1;j++) g=LCA::lca(g,j);
			ans=max(ans,dep[g]);
			// ans=max(ans,dep[query(i,i+k-1)]);
		}
		printf("%d\n",ans);
	}
	return 0;
}




}
int main() {
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	freopen("stderr","w",stderr);
	int T=1;
	while(T--) {
		dada::Main();
	}
	return 0;
}
/*
cd query
g++ query.cpp -o query -std=c++14 -Wall -O2 -Wl,-stack=512000000
time ./query
cp query1.in query.in
diff query.out query1.ans -w
*/