#include<iostream>
#include<cstdio>
#include<cmath>
#include<string>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstring>
#include<vector>
#include<list>
#include<set>
#include<map>
#define true ture
#define false flase
using namespace std;
#define ll long long
#define inf 0xfffffff
int scan()
{
int res = 0 , ch ;
while( !( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ ) )
{
if( ch == EOF ) return 1 << 30 ;
}
res = ch - ‘0‘ ;
while( ( ch = getchar() ) >= ‘0‘ && ch <= ‘9‘ )
res = res * 10 + ( ch - ‘0‘ ) ;
return res ;
}
#define maxn 500010
#define M 22
struct is
{
int v,next;
}edge[maxn*2];
int deep[maxn],jiedge;
int head[maxn];
int fa[maxn][M];
void add(int u,int v)
{
jiedge++;
edge[jiedge].v=v;
edge[jiedge].next=head[u];
head[u]=jiedge;
}
void dfs(int u)
{
for(int i=head[u];i;i=edge[i].next)
{
int v=edge[i].v;
if(!deep[v])
{
deep[v]=deep[u]+1;
fa[v][0]=u;
dfs(v);
}
}
}
void st(int n)
{
for(int j=1;j<M;j++)
for(int i=1;i<=n;i++)
fa[i][j]=fa[fa[i][j-1]][j-1];
}
int LCA(int u , int v)
{
if(deep[u] < deep[v]) swap(u , v) ;
int d = deep[u] - deep[v] ;
int i ;
for(i = 0 ; i < M ; i ++)
{
if( (1 << i) & d ) // 注意此处,动手模拟一下,就会明白的
{
u = fa[u][i] ;
}
}
if(u == v) return u ;
for(i = M - 1 ; i >= 0 ; i --)
{
if(fa[u][i] != fa[v][i])
{
u = fa[u][i] ;
v = fa[v][i] ;
}
}
u = fa[u][0] ;
return u ;
}
void init()
{
memset(head,0,sizeof(head));
memset(fa,0,sizeof(fa));
memset(deep,0,sizeof(deep));
jiedge=0;
}
struct kk
{
int a,b;
}a[4];
kk ans(int x,int y,int z)
{
int ans=LCA(x,y);
int road=abs(deep[x]-deep[ans])+abs(deep[y]-deep[ans]);
int gg=LCA(ans,z);
road+=abs(deep[z]-deep[gg])+abs(deep[gg]-deep[ans]);
kk lll;
lll.a=ans;
lll.b=road;
return lll;
}
int main()
{
int x,n;
init();
scanf("%d%d",&n,&x);
for(int i=1;i<n;i++)
{
int u,v;
scanf("%d%d",&u,&v);
add(u,v);add(v,u);
}
deep[1]=1;
dfs(1);
st(n);
for(int i=0;i<x;i++)
{
scanf("%d%d%d",&a[0].a,&a[1].a,&a[2].a);
kk minn;
minn.b=inf;
kk ji;
ji=ans(a[0].a,a[1].a,a[2].a);
if(ji.b<minn.b)
minn=ji;
ji=ans(a[2].a,a[0].a,a[1].a);
if(ji.b<minn.b)
minn=ji;
ji=ans(a[2].a,a[1].a,a[0].a);
if(ji.b<minn.b)
minn=ji;
printf("%d %d\n",minn.a,minn.b);
}
return 0;
}