import sys from collections import deque def main(): input = sys.stdin.read().split() ptr = 0 N, Q = int(input[ptr]), int(input[ptr+1]) ptr +=2 edges = [[] for _ in range(N+1)] for _ in range(N-1): a = int(input[ptr]) b = int(input[ptr+1]) edges[a].append(b) edges[b].append(a) ptr +=2 LOG = 20 parent = [[-1]*(LOG) for _ in range(N+1)] depth = [0]*(N+1) children = [[] for _ in range(N+1)] visited = [False]*(N+1) q = deque() q.append(1) visited[1] = True parent[1][0] = -1 while q: u = q.popleft() for v in edges[u]: if not visited[v] and v != parent[u][0]: parent[v][0] = u depth[v] = depth[u] +1 visited[v] = True children[u].append(v) q.append(v) for k in range(1, LOG): for u in range(1, N+1): if parent[u][k-1] != -1: parent[u][k] = parent[parent[u][k-1]][k-1] else: parent[u][k] = -1 size = [1]*(N+1) stack = [(1, False)] while stack: u, processed = stack.pop() if processed: for v in children[u]: size[u] += size[v] else: stack.append((u, True)) for v in reversed(children[u]): stack.append((v, False)) def lca(u, v): if depth[u] < depth[v]: u, v = v, u for k in reversed(range(LOG)): if depth[u] - (1 << k) >= depth[v]: u = parent[u][k] if u == v: return u for k in reversed(range(LOG)): if parent[u][k] != -1 and parent[u][k] != parent[v][k]: u = parent[u][k] v = parent[v][k] return parent[u][0] def get_kth_ancestor(u, k): current = u for i in range(LOG): if (k >> i) & 1: if current == -1: return -1 current = parent[current][i] if current == -1: return -1 return current output = [] for _ in range(Q): S = int(input[ptr]) T = int(input[ptr+1]) ptr +=2 L = lca(S, T) a = depth[S] - depth[L] b = depth[T] - depth[L] D = a + b if D % 2 != 0: output.append('0') continue k = D // 2 if k <= a: M = get_kth_ancestor(S, k) else: required = b - (k - a) M = get_kth_ancestor(T, required) if M == -1: output.append('0') continue k1 = depth[S] - depth[M] if k1 == 0: u = S else: u = get_kth_ancestor(S, k1 - 1) if u == -1: output.append('0') continue k2 = depth[T] - depth[M] if k2 == 0: v = T else: v = get_kth_ancestor(T, k2 - 1) if v == -1: output.append('0') continue if parent[u][0] != M or parent[v][0] != M: output.append('0') continue answer = size[M] - size[u] - size[v] output.append(str(answer)) print('\n'.join(output)) if __name__ == "__main__": main()