#include <stdio.h>
#include <stdlib.h>
#define MAX 100010
typedef long long ll;
typedef struct edge
{
int v;
struct edge* next;
}edge;
struct edge* e[MAX];
ll fa[MAX];
ll dep[MAX];
ll son[MAX];
ll siz[MAX];
ll top[MAX];
ll sum[MAX];
ll w[MAX];
int n, m;
void add_edge(int u, int v)
{
struct edge* p = (struct edge*)malloc(sizeof(struct edge));
p->v = v;
p->next = e[u];
e[u] = p;
}
void update_weights()
{
for (int i = 1; i <= n; i++)
{
w[i] = 0;
}
for (int u = 1; u <= n; u++)
{
for (struct edge* p = e[u]; p != NULL; p = p->next)
{
w[u]++;
}
}
}
void dfs1(ll u, ll f)
{
fa[u] = f;
dep[u] = dep[f] + 1;
siz[u] = 1;
sum[u] = sum[f] + w[u];
for (struct edge* p = e[u]; p != NULL; p = p->next)
{
ll v = p->v;
if (v == f) continue;
dfs1(v, u);
siz[u] += siz[v];
if (siz[v] > siz[son[u]])
{
son[u] = v;
}
}
}
void dfs2(ll u, ll t)
{
top[u] = t;
if (son[u] == 0) return;
dfs2(son[u], t);
for (struct edge* p = e[u]; p != NULL; p = p->next)
{
ll v = p->v;
if (v == fa[u] || v == son[u]) continue;
dfs2(v, v);
}
}
ll lca(ll x, ll y)
{
while (top[x] != top[y])
{
if (dep[top[x]] > dep[top[y]]) x = fa[top[x]];
else y = fa[top[y]];
}
return dep[x] < dep[y] ? x : y;
}
ll get(ll x, ll y)
{
if (x == 0 || y == 0) return 0;
return sum[x] + sum[y] - 2*sum[lca(x, y)]+w[lca(x,y)];
}
int main(void)
{
scanf("%d%d", &n, &m);
for (int i = 1; i < n; i++)
{
int u, v;
scanf("%d%d", &u, &v);
add_edge(u, v);
add_edge(v, u);
}
update_weights();
dfs1(1, 0);
dfs2(1, 1);
for (int i = 1; i <= m; i++)
{
int a, b;
scanf("%d%d", &a, &b);
if (a == b) printf("1\n");
else
printf("%lld\n", get(a, b));
}
return 0;
}