#include<iostream>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#define mod 1000000007
#define int long long
#define fi first
#define se second
using namespace std;
vector <int> g[500001];
int n,father[19][500001],dep[500001],rlca[5001][5001],id[500001];
void getfather(int u,int fa)
{
	dep[u]=dep[fa]+1;
	father[0][u]=fa;
	for(int i=1;i<=18;i++)
	{
		father[i][u]=father[i-1][father[i-1][u]];
	}
	for(int v:g[u])
	{
		if(v==fa) continue;
		getfather(v,u);
	}
}
int getlca(int u,int v)
{
	if(dep[u]>dep[v]) swap(u,v);
	for(int i=18;i>=0;i--)
	{
		if(dep[father[i][v]]>=dep[u])
		{
			v=father[i][v];
		}
	}
	if(u==v) return u;
	for(int i=18;i>=0;i--)
	{
		if(father[i][u]!=father[i][v])
		{
			u=father[i][u];
			v=father[i][v];
		}
	}
	return father[0][u];
}
namespace sub2
{
	struct ztef
	{
		int l,r,L,R;
	};
	int l[500001],r[500001],k[500001],ma[2000001];
	vector <ztef> now,nxt;
	void add(int o,int l,int r,int x,int v)
	{
		if(x<1||x>n) return;
		if(l==r)
		{
			ma[o]=v;
			return;
		}
		int mid=l+r>>1;
		if(x<=mid) add(o<<1,l,mid,x,v);
		else add(o<<1|1,mid+1,r,x,v);
		ma[o]=max(ma[o<<1],ma[o<<1|1]);
	}
	int get(int o,int l,int r,int x,int y)
	{
		if(x<=l&&r<=y)
		{
			return ma[o];
		}
		if(r<x||l>y)
		{
			return 0;
		}
		int mid=l+r>>1;
		return max(get(o<<1,l,mid,x,y),get(o<<1|1,mid+1,r,x,y));
	}
	void build(int o,int l,int r)
	{
		ma[o]=0;
		if(l==r)
		{
			return ;
		}
		int mid=l+r>>1;
		build(o<<1,l,mid);
		build(o<<1|1,mid+1,r);
	}
	set<int> st;
	void ins(int id)
	{
//		cerr<<"INS "<<id<<'\n';
		auto p=st.lower_bound(id);
		if(p!=st.end())
		{
			add(1,1,n,*p,(*p)-id-1);
		}
		p--;
		add(1,1,n,id,id-(*p)-1);
		st.insert(id);
	}
	vector <int> Q,P;
	int qid[500001],ans[500001];
	bool check(int id)
	{
		int w=get(1,1,n,l[id]+k[id]-1,r[id]);
		auto w1=st.upper_bound(r[id]);
		int w2=0;
		if(w1!=st.begin())
		{
			--w1;
			w2=r[id]-max((*w1),l[id]-1);
		}
//		cout<<">>"<<l[id]<<' '<<r[id]<<' '<<w<<' '<<w2<<' '<<(*w1)<<'\n';
		return (max(w,w2)>=k[id]);
	}
	void mian()
	{
		for(int i=1;i<=n;i++)
		{
			id[dep[i]]=i;
		}
		int q;
		cin>>q;
		for(int i=1;i<=q;i++)
		{
			cin>>l[i]>>r[i]>>k[i];
//			cerr<<l[i]<<' '<<r[i]<<" "<<k[i]<<'\n';
			qid[i]=i;
		}
		now.push_back((ztef){1,n,1,q});
		for(int _=0;_<=22;_++)
		{
			if(!now.size()) break;
			int zz=1;
			st.clear();
			st.insert(0);
			build(1,1,n);
//			for(int i=1;i<=q;i++)
//			{
//				cout<<qid[i]<<" ";
//			}
//			cout<<'\n';
			for(ztef nw:now)
			{
				if(nw.L>nw.R) continue;
//				cout<<nw.l<<' '<<nw.r<<' '<<nw.L<<' '<<nw.R<<'\n';
				if(nw.l==nw.r)
				{
					for(int i=nw.L;i<=nw.R;i++)
					{
						ans[qid[i]]=nw.l;
					}
					continue;
				}
				int mid=(nw.l+nw.r>>1)+1;
				while(zz<mid)
				{
					ins(id[zz]);
					zz++;
				}
//				cout<<mid<<" : \n";
				Q.clear();
				P.clear();
				for(int i=nw.L;i<=nw.R;i++)
				{
					if(check(qid[i]))
					{
						Q.push_back(qid[i]);
					}
					else
					{
						P.push_back(qid[i]);
					}
				}
				int noww=nw.L;
				for(int w:P)
				{
					qid[noww++]=w;
				}
				nxt.push_back((ztef){nw.l,mid-1,nw.L,noww-1});
				nw.L=noww;
				for(int w:Q)
				{
					qid[noww++]=w;
				}
				nxt.push_back((ztef){mid,nw.r,nw.L,noww-1});
			}
			now=nxt;
			nxt.clear();
		}
		for(int i=1;i<=q;i++)
		{
			cout<<ans[i]<<'\n';
		}
	}
}
signed main()
{
//	freopen("D:\\noip\\down\\day0\\query\\query3.in","r",stdin);
//	freopen("D:\\noip\\down\\day0\\query\\query3.out","w",stdout);
	freopen("query.in","r",stdin);
	freopen("query.out","w",stdout);
	ios::sync_with_stdio(false);
	cin.tie(0);
	cout.tie(0);
	cin>>n;
	for(int i=2,u,v;i<=n;i++)
	{
		cin>>u>>v;
		g[u].push_back(v);
		g[v].push_back(u);
	}
	getfather(1,0);
	if(n<=5000)
	{
		for(int l=1;l<=n;l++)
		{
			rlca[l][l]=l;
			for(int r=l+1;r<=n;r++)
			{
				rlca[l][r]=getlca(rlca[l][r-1],r);
				if(rlca[l][r]==rlca[l-1][r])
				{
					for(int j=r;j<=n;j++)
					{
						rlca[l][j]=rlca[l-1][j];
					}
					break;
				}
			}
		}
		int q;
		cin>>q;
		while(q--)
		{
			int l,r,k,ans=0;
			cin>>l>>r>>k;
			for(int R=l+k-1;R<=r;R++)
			{
				ans=max(ans,dep[rlca[R-k+1][R]]);
			}
			cout<<ans<<'\n';
		}
		return 0;
	}
	else
	{
		sub2::mian();
	}
}
/*
5
1 2
2 4
4 5
3 5
3
1 3 2
2 5 1
1 5 3
*/
