#include<iostream>
#include<cstdio>
#include<vector>
using namespace std;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();}
while(c<='9'&&c>='0') x=(x<<3)+(x<<1)+(c-48),c=getchar();
return x*f;
}
const int N=1e5+10;
int inv[N],fa[N],dep[N],dis[N];
int n,m;
vector <int> G[N];
int st[N][20];
void dfs(int u,int f,int d){
fa[u]=f,dep[u]=d;
st[u][0]=f;
for(int i=1;i<=19;i++){
st[u][i]=st[ st[u][i-1] ][i-1];
}
for(auto v:G[u]){
if(v==f||v==u) continue;
dis[v]=dis[u]+inv[u];
dfs(v,u,d+1);
}
}
int lca(int x,int y){
//1.make sure x is lower than y
if(x==y) return x;
if(dep[x]<dep[y]) swap(x,y);
for(int i=19;i>=0;i--){
if(dep[ st[x][i] ]<=dep[y]) x=st[x][i];
}
if(x==y) return x;
//2.jump more jump!
for(int i=19;i>=0;i--){
if(st[x][i]!=st[y][i]) x=st[x][i],y=st[x][i];
}
return st[x][0];
}
int main(){
n=read(),m=read();
for(int i=1;i<n;i++){
int u=read(),v=read();
inv[u]++,inv[v]++;
G[u].push_back(v);G[v].push_back(u);
}
dfs(1,0,1);
while(m--){
int u=read(),v=read();
int w=lca(u,v);
cout<<dis[u]+dis[v]-2*dis[w]+inv[w]<<endl;
}
// for(int i=1;i<=n;i++) cout<<inv[i]<<" ";cout<<endl;
// for(int i=1;i<=n;i++) cout<<dis[i]<<" ";cout<<endl;
return 0;
}