#include<bits/stdc++.h>
using namespace std;
const int N=500010;
int h[N],e[N*2],ne[N*2],idx;
void add(int a,int b){e[++idx]=b;ne[idx]=h[a];h[a]=idx;}
int dep[N],dfn[N],cnt;
int fdfn[N];
int f[N][20];
struct node{int l,r,k;}a[N];
int n,q;
void dfs1(int u,int fa){
dep[u]=dep[fa]+1;dfn[u]=++cnt;
fdfn[dfn[u]]=u;
f[u][0]=fa;
for(int i=h[u];i;i=ne[i]){
int j=e[i];
if(j==fa) continue;
dfs1(j,u);
}
}
int que1[N],f1,t1;
int que2[N],f2,t2;
namespace task1{
int lca(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
for(int i=15;i>=0;i--){
if(dep[f[u][i]]>=dep[v]) u=f[u][i];
}
if(u==v) return u;
for(int i=15;i>=0;i--){
if(f[u][i]!=f[v][i]){
u=f[u][i],v=f[v][i];
}
}
return f[u][0];
}
void solve(){
for(int i=1;i<=q;i++){
f1=0,t1=0,f2=0,t2=0;
int ans=0;
for(int j=a[i].l;j<=a[i].r;j++){
while(f1<t1&&que1[f1+1]+a[i].k<=j) f1++;
while(f2<t2&&que2[f2+1]+a[i].k<=j) f2++;
while(f1<t1&&dfn[que1[t1]]>dfn[j]) t1--;
que1[++t1]=j;
while(f2<t2&&dfn[que2[t2]]<dfn[j]) t2--;
que2[++t2]=j;
if(j-a[i].l+1>=a[i].k) ans=max(ans,dep[lca(que1[f1+1],que2[f2+1])]);
}
printf("%d\n",ans);
}
}
}
namespace taskb{
int st1[N][20],st2[N][20];
int lg[N];
int lca(int u,int v){
if(dep[u]<dep[v]) swap(u,v);
for(int i=19;i>=0;i--){
if(dep[f[u][i]]>=dep[v]) 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 q1(int l,int r){
int v=lg[r-l+1];
return min(st1[l][v],st1[r-(1<<v)+1][v]);
}
int q2(int l,int r){
int v=lg[r-l+1];
return max(st2[l][v],st2[r-(1<<v)+1][v]);
}
void solve(){
for(int i=1;i<=n;i++) st1[i][0]=st2[i][0]=dfn[i];
lg[0]=-1;
for(int i=1;i<=n;i++) lg[i]=lg[i>>1]+1;
for(int i=1;(1<<i)<=n;i++){
for(int j=1;j+(1<<i)-1<=n;j++){
st1[j][i]=min(st1[j][i-1],st1[j+(1<<(i-1))][i-1]);
st2[j][i]=max(st2[j][i-1],st2[j+(1<<(i-1))][i-1]);
}
}
for(int i=1;i<=q;i++){
printf("%d\n",dep[lca(fdfn[q1(a[i].l,a[i].r)],fdfn[q2(a[i].l,a[i].r)])]);
}
}
}
int main(){
freopen("query.in","r",stdin);
freopen("query.out","w",stdout);
scanf("%d",&n);
for(int i=1;i<n;i++){
int u,v;scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
dfs1(1,0);
for(int i=1;i<=19;i++){
for(int j=1;j<=n;j++){
f[j][i]=f[f[j][i-1]][i-1];
}
}
scanf("%d",&q);
bool tag=1;
for(int i=1;i<=q;i++){
scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].k);
if(a[i].r-a[i].l+1!=a[i].k) tag=0;
}
if(n<=5000&&q<=5000) task1::solve();
else{
if(tag) taskb::solve();
}
return 0;
}