import sys
from collections import deque

def main():
    sys.setrecursionlimit(1 << 25)
    input = sys.stdin.read().split()
    idx = 0
    N, K = int(input[idx]), int(input[idx+1])
    idx += 2

    edges = [[] for _ in range(N + 1)]
    for _ in range(N - 1):
        u = int(input[idx])
        v = int(input[idx + 1])
        edges[u].append(v)
        edges[v].append(u)
        idx += 2

    D = list(map(int, input[idx:idx + K]))
    idx += K

    if K == 1:
        d1 = D[0]
        dist = [-1] * (N + 1)
        q = deque()
        q.append(d1)
        dist[d1] = 0
        while q:
            u = q.popleft()
            for v in edges[u]:
                if dist[v] == -1:
                    dist[v] = dist[u] + 1
                    q.append(v)
        for x in range(1, N + 1):
            print(dist[x])
        return

    parent = [0] * (N + 1)
    depth = [0] * (N + 1)
    q = deque()
    root = 1
    q.append(root)
    parent[root] = 0
    depth[root] = 0
    visited = [False] * (N + 1)
    visited[root] = True
    while q:
        u = q.popleft()
        for v in edges[u]:
            if not visited[v] and v != parent[u]:
                parent[v] = u
                depth[v] = depth[u] + 1
                visited[v] = True
                q.append(v)

    LOG = 20
    up = [[0] * (N + 1) for _ in range(LOG)]
    up[0] = parent
    for k in range(1, LOG):
        for v in range(1, N + 1):
            up[k][v] = up[k-1][up[k-1][v]]

    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 = up[k][u]
        if u == v:
            return u
        for k in reversed(range(LOG)):
            if up[k][u] != up[k][v]:
                u = up[k][u]
                v = up[k][v]
        return parent[u]

    S = D
    s = S[0]
    max_dist = -1
    u = s
    dist = [-1] * (N + 1)
    q = deque([s])
    dist[s] = 0
    while q:
        current = q.popleft()
        for neighbor in edges[current]:
            if dist[neighbor] == -1:
                dist[neighbor] = dist[current] + 1
                q.append(neighbor)
    for node in S:
        if dist[node] > max_dist:
            max_dist = dist[node]
            u = node

    dist = [-1] * (N + 1)
    q = deque([u])
    dist[u] = 0
    while q:
        current = q.popleft()
        for neighbor in edges[current]:
            if dist[neighbor] == -1:
                dist[neighbor] = dist[current] + 1
                q.append(neighbor)
    max_dist = -1
    v = u
    for node in S:
        if dist[node] > max_dist:
            max_dist = dist[node]
            v = node
    A = u
    B = v

    current_lca = S[0]
    for node in S[1:]:
        current_lca = lca(current_lca, node)
    R = current_lca

    edge_set = set()

    for node in S:
        current = node
        while current != R:
            p = parent[current]
            a = min(current, p)
            b = max(current, p)
            edge_set.add((a, b))
            current = p

    E = len(edge_set)

    def bfs(start):
        dist = [-1] * (N + 1)
        q = deque([start])
        dist[start] = 0
        while q:
            u = q.popleft()
            for v in edges[u]:
                if dist[v] == -1:
                    dist[v] = dist[u] + 1
                    q.append(v)
        return dist

    dist_A = bfs(A)
    dist_B = bfs(B)

    for x in range(1, N + 1):
        max_d = max(dist_A[x], dist_B[x])
        res = 2 * E - max_d
        print(res)

if __name__ == "__main__":
    main()