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()