#include<bits/stdc++.h>
using namespace std;
int n;
#define pb push_back
void rd(int &x){
x=0;char c=getchar();
while(c<'0'||c>'9')c=getchar();
while(c>='0'&&c<='9')x=x*10+c-'0',c=getchar();
}
void wrt(int x){
if(x<10){putchar(x+'0');return;}
wrt(x/10),putchar((x%10)+'0');
}
const int N=5e5+10;
namespace Tr{
int f[N][20],d[N];
vector<int>g[N];
void ad(int u,int v){g[u].pb(v),g[v].pb(u);}
int lca(int u,int v){
if(d[u]<d[v])swap(u,v);int a=d[u]-d[v];
for(int i=19;i>=0;i--)if((a>>i)&1)u=f[u][i];
if(u==v)return u;
for(int i=19;i>=0;i--)if(f[u][i]!=f[v][i])u=f[u][i],v=f[v][i];return f[u][0];
}
int ask(int u,int v){return d[lca(u,v)];}
void dfs(int x){
for(int v:g[x])if(f[x][0]!=v){
d[v]=d[x]+1,f[v][0]=x;
for(int i=1;i<20;i++)f[v][i]=f[f[v][i-1]][i-1];
dfs(v);
}
}
}
int st[N][20],fa[N];
#define pi pair<int,int>
pi a[N];
int F(int x){
if(x==fa[x])return x;
return fa[x]=F(fa[x]);
}
int lg[N];
int ask1(int l,int r){
int k=lg[r-l+1];
return max(st[l][k],st[r-(1<<k)+1][k]);
}
#define ai array<int,3>
vector<ai>g1[501000],g2[500100];
void ins(int x,int y,int w){g1[y].pb({x,w,0}),g2[y-x+1].pb({x,w,0});}
int q,ans[N],L[N];
int mx[N<<2],M;
void up(int x,int z){
int u=x+M;
while(u)mx[u]=max(mx[u],z),u>>=1;
}
int ask(int l,int r){
l+=M-1,r+=M+1;int an=0;
while((l^r)>>1){
if(!(l&1))an=max(an,mx[l^1]);
if(r&1)an=max(an,mx[r^1]);
l>>=1,r>>=1;
}
return an;
}
void doi(){
memset(mx,0,sizeof(mx));
for(int i=n;i;i--){
for(ai e:g1[i])if(e[2]==0)up(e[0],e[1]);
for(ai e:g1[i])if(e[2])ans[e[2]]=max(ans[e[2]],ask(e[0],e[1]));
}
}
int main(){
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
rd(n);
for(int i=1,u,v;i<n;i++)rd(u),rd(v),Tr::ad(u,v);
Tr::dfs(1);for(int i=1;i<n;i++)a[i]={Tr::ask(i,i+1),i};
M=1;while(M<=n+1)M<<=1;
lg[0]=-1;
for(int i=1;i<=n;i++)st[i][0]=Tr::d[i],lg[i]=lg[i>>1]+1,L[i]=fa[i]=i;
for(int j=1;j<20;j++)for(int i=1;i+(1<<j)-1<=n;i++)st[i][j]=max(st[i][j-1],st[i+(1<<(j-1))][j-1]);
sort(a,a+n);
for(int i=n-1;i;i--){
int u=a[i].second,f=F(u+1);
ins(L[u],f,a[i].first);
fa[u]=f,L[f]=L[u];
}
rd(q);for(int i=1,l,r,k;i<=q;i++){
rd(l),rd(r),rd(k);
if(k==1)ans[i]=ask1(l,r);
else g1[l+k-1].pb({1,l,i}),g2[k].pb({l,r-k+1,i});
}
doi();for(int i=1;i<=n;i++)swap(g1[i],g2[i]);doi();
for(int i=1;i<=q;i++)wrt(ans[i]+1),putchar('\n');
return 0;
}