CSES - Shared codeLink to this code: https://cses.fi/paste/dbc9a4a192220ac7372878/
/*
=============================================================================
      /\       \      /      /\         |\           /|    |===========
     / 	\       \    /      /  \        | \         / |    |
    /    \       \  /      /    \       |  \       /  |    |
   /      \       |       /      \      |   \     /   |    |===========
  /--------\      |      /--------\     |    \   /    |    |
 /          \     |     /          \    |     \ /     |    |
/            \    |    /            \   |      |      |    |===========
     A        A
  AAAAAAAA   AAA AAAA      A    A      A     A        A          A
    A    A    A A    A     A     A     A      A      A A        A A
   A     A    AA      A    A      A    A       A    A   A      A   A
  A   A  A   AA     A      A  A   A    A  A    A
 A     AAA    A    A       AAA         AAA               AAAAA
=============================================================================
*/
#include<bits/stdc++.h>
#define pb push_back
#define pf push_front
#define mp make_pair
#define F first
#define S second
#define pq priority_queue
#define ll long long
#define pii pair<int,int>
#define endl '\n'
#define Orz ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
#define MAXN 200001
using namespace std;
//YeedragOrz
//8e7Orz
//jassOrz
//FHvirusOrz
//samOrz
//yungyaoOrz
//littlecubeOrz
//2qbingxuanOrz
//FoodSheepOrz
//ck_platypusOrz
//koyingOrz
//foxyyOrz
//peiganOrz
//jikuaiOrz
vector<int> gra[MAXN];
int dep[MAXN],spa[MAXN][20];

void dfs(int pos,int pre){
	for(auto i:gra[pos]){
		if(i!=pre){
			dep[i]=dep[pos]+1;
			spa[i][0]=pos;
			dfs(i,pos);	
		}
	}
}
int lca(int a,int b){
	if(dep[a]>dep[b])swap(a,b);
	int gap=dep[b]-dep[a];
	for(int i=0;i<=19;i++){
		if((1<<i)&gap)b=spa[b][i];
	}
	if(a==b)return a;
	for(int i=19;i>=0;i--){
		if(spa[a][i]!=spa[b][i]){
			a=spa[a][i];
			b=spa[b][i];
		}
	}
	return spa[a][0];
}
int main(){
	int n,q;cin>>n>>q;
	for(int i=1;i<n;i++){
		int a,b;cin>>a>>b;
		gra[a].pb(b);
		gra[b].pb(a);
	}
	dep[1]=0;
	spa[1][0]=1;
	dfs(1,-1);
	for(int i=1;i<=19;i++){
		for(int j=1;j<=n;j++)spa[j][i]=spa[spa[j][i-1]][i-1];
	}
	while(q--){
		int a,b;cin>>a>>b;
		cout<<dep[a]+dep[b]-dep[lca(a,b)]*2<<endl;
	}
	return 0;
}