#include <bits/stdc++.h>
using namespace std;
const long long N=500005;
vector <long long> g[N];
long long parent[N][20];
long long depth[N];
void dfs(long long u,long long p)
{
parent[u][0]=p;
depth[u]=depth[p]+1;
for(long long k=1;k<20;k++)
{
parent[u][k]=parent[parent[u][k-1]][k-1];
}
for(auto v:g[u])
{
if(v!=p)
{
dfs(v,u);
}
}
}
long long lca(long long u,long long v)
{
if(depth[u]<depth[v]) swap(u,v);
for(long long k=19;k>=0;k--)
{
if(depth[parent[u][k]]>=depth[v])
{
u=parent[u][k];
}
}
if(u==v)
{
return u;
}
for(long long k=19;k>=0;k--)
{
if(parent[u][k]!=parent[v][k])
{
u=parent[u][k];
v=parent[v][k];
}
}
return parent[u][0];
}
long long getdist(long long u,long long v)
{
return depth[u]+depth[v]-2*depth[lca(u,v)];
}
int main()
{
ios::sync_with_stdio(false);
cin.tie(0);
long long n,m;
cin>>n>>m;
long long a,b;
for(long long i=1;i<n;i++)
{
cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
dfs(1,0);
for(long long i=1;i<=m;i++)
{
long long x,y,z;
cin>>x>>y>>z;
long long l1=lca(x,y);
long long l2=lca(x,z);
long long l3=lca(y,z);
long long p;
if(depth[l1]>depth[l2])
{
p=l1;
}
else
{
p=l2;
}
if(depth[l3]>depth[p])
{
p=l3;
}
long long c=getdist(x,p)+getdist(y,p)+getdist(z,p);
cout<<p<<" "<<c<<endl;
}
return 0;
}
不是两个点tle什么鬼?