def dfs(roads, path, searched):
    for neighbour in roads[path[-1]]:
        if neighbour in path:
            continue
        new_path = path.copy()
        new_path.append(neighbour)
        if neighbour == searched:
            return new_path
        result = dfs(roads, new_path, searched)
        if result:
            return result


def exercise():
    n, k = [int(i) for i in input().split()]

    roads = {}
    for _ in range(n - 1):
        a, b = [int(i) for i in input().split()]
        roads.setdefault(a, []).append(b)
        roads.setdefault(b, []).append(a)

    ms = []
    for _ in range(k):
        a, b = [int(i) for i in input().split()]
        ms.append((a, b))

    paths = []
    for m in ms:
        paths.append(dfs(roads, [m[0]], m[1]))

    vulnerable = set()
    for p in paths:
        if len(p) % 2 == 0:
            vulnerable.add((p[len(p) // 2 - 1], p[len(p) // 2]))
        else:
            vulnerable.add((p[len(p) // 2],))

    cats = set()
    # for v in vulnerable.copy():
    #     if len(v) == 1:
    #         cats.add(v[0])
    #         for v2 in vulnerable.copy():
    #             if v[0] in v2:
    #                 vulnerable.remove(v2)

    while True:
        counter = {}
        for v in vulnerable:
            counter[v[0]] = counter.setdefault(v[0], 0) + 1
            if len(v) > 1:
                counter[v[1]] = counter.setdefault(v[1], 0) + 1
        if not counter:
            break

        max_v = max(counter.values())
        max_l = [k for k, v in counter.items() if v == max_v]

        if len(max_l) == 1:
            cats.add(max_l[0])
            for v in vulnerable.copy():
                if max_l[0] in v:
                    vulnerable.remove(v)
        else:
            min_v = min(counter.values())
            min_l = [k for k, v in counter.items() if v == min_v]
            if min_v == 1:
                for n in min_l:
                    for v in vulnerable.copy():
                        if n in v:
                            vulnerable.remove(v)
                            if len(v) > 1:
                                vulnerable.add((v[0] if v[1] == n else v[1],))
                            else:
                                cats.add(n)
            else:
                for v in vulnerable.copy():
                    if min_l[0] in v:
                        vulnerable.remove(v)

                        if len(v) > 1:
                            vulnerable.add((v[0] if v[1] == min_l[0] else v[1],))
                        else:
                            cats.add(n)

    print(len(cats))


exercise()
