#include<bits/stdc++.h>
using namespace std;
const int N=3e3+5,bit=20;
vector<int>g[N];
int n,T,m,f[N][20],dep[N],vis[N],pos1[N],pos2[N];
void dfs(int u){
for(int v:g[u]){
if(v!=f[u][0]){
f[v][0]=u,dep[v]=dep[u]+1;
for(int i=1;i<bit;i++){
f[v][i]=f[f[v][i-1]][i-1];
}
dfs(v);
}
}
}
int lca(int u,int v){
if(dep[u]<dep[v]){
swap(u,v);
}
int num=dep[u]-dep[v];
for(int i=0;i<bit;i++){
if(num>>i&1){
u=f[u][i];
}
}
if(u==v){
return u;
}
for(int i=bit-1;i>=0;i--){
if(f[u][i]!=f[v][i]){
u=f[u][i],v=f[v][i];
}
}
return f[u][0];
}
pair<int,int>exgcd(int a,int b){
if(!b){
return {1,0};
}
auto [x,y]=exgcd(b,a%b);
return {y,x-a/b*y};
}
int lcm(int x,int y){
return x/__gcd(x,y)*y;
}
int crt(int b1,int a1,int b2,int a2){
int d=__gcd(b1,-b2);
if((a2-a1)%d){
return -1;
}
int p1=b1/d,p2=b2/d,c=(a2-a1)/d;
auto [x,y]=exgcd(p1,-p2);
x*=c,y*=c,x%=lcm(b1,b2);
a1=(b1*x+a1)%lcm(b1,b2),b1=lcm(b1,b2);
return (a1%b1+b1)%b1;
}
vector<int>route(int u,int v){
int num=lca(u,v);
vector<int>ret;
while(u!=num){
ret.push_back(u),u=f[u][0];
}
ret.push_back(num);
vector<int>tmp;
while(v!=num){
tmp.push_back(v),v=f[v][0];
}
reverse(tmp.begin(),tmp.end());
for(int i:tmp){
ret.push_back(i);
}
return ret;
}
void init(){
for(int i=1;i<=n;i++){
g[i].clear();
}
}
vector<int>db(vector<int>A){
vector<int>B=A;
B.pop_back();
reverse(B.begin(),B.end());
for(int i:B){
A.push_back(i);
}
return A;
}
signed main(){
cin>>T;
while(T--){
cin>>n>>m,init();
for(int i=1,u,v;i<n;i++){
cin>>u>>v,g[u].push_back(v),g[v].push_back(u);
}
dfs(1);
for(int sa,ta,sb,tb;m--;){
cin>>sa>>ta>>sb>>tb;
int id=0;
vector<int>A=route(sa,ta),B=route(sb,tb);
A=db(A),B=db(B);
for(int i:B){
if(!vis[i]){
vis[i]=1,pos1[i]=id;
}
else{
pos2[i]=id;
}
id++;
}
id=0;
int ans=1e9,num=0;
for(int i:A){
if(vis[i]){
int x=crt(A.size(),id,B.size(),pos1[i]);
if(x!=-1){
if(ans>x){
ans=x,num=i;
}
}
x=crt(A.size(),id,B.size(),pos2[i]);
if(x!=-1){
if(ans>x){
ans=x,num=i;
}
}
}
id++;
}
for(int i:B){
vis[i]=0;
}
if(ans==1e9){
cout<<"-1\n";
}
else{
cout<<num<<'\n';
}
}
}
}