N, Q = list(map(int,input().split())) # 複数の数字を変数に格納

List_ab = [list(map(int,input().split())) for i in range(N-1)] # [[1,2],[3,4],[5,6]]

List_px = [list(map(int,input().split())) for i in range(Q)] # [[1,2],[3,4],[5,6]]



count_list = [0]*N



List_ab.sort()



for i in range(Q):

    count_list[List_px[i][0]-1] += List_px[i][1]

        

for i in range(N-1):

    count_list[List_ab[i][1]-1] += count_list[List_ab[i][0]-1]

    

print((*count_list))
import sys

sys.setrecursionlimit(10 ** 6)

import sys

def input():

    return sys.stdin.readline()[:-1]

N , Q = list(map(int,input().split()))

graph = [[] for _ in range(N)]

point = [0] * N

for _ in range(N - 1):

    a , b = list(map(int,input().split()))

    graph[a - 1].append(b - 1)

    graph[b - 1].append(a - 1)

#print(graph)

for _ in range(Q):

    a , b = list(map(int,input().split()))

    a = a - 1

    point[a] += b

# dfsを用いて累積和を計算する

# 初期状態だと前の値がないためデフォルト引数に-1を代入

def dfs(now , prev = -1):

    for next in graph[now]:

        # 次のノードが前に参照した値の時はcontinue

        if next == prev:

            continue

        # 現在の値を次のポイントに加算することで累積和をとる

        point[next] += point[now]

        # 次のノードと現在のノードを引数にdfsを継続する

        dfs(next , now)

 

dfs(0)

print((*point))
N, Q = list(map(int, input().split()))  # 複数の数字を変数に格納
List_ab = [list(map(int, input().split())) for i in range(N - 1)]  # [[1,2],[3,4],[5,6]]
List_px = [list(map(int, input().split())) for i in range(Q)]  # [[1,2],[3,4],[5,6]]
count_list = [0] * N
List_ab.sort()
for i in range(Q):
    count_list[List_px[i][0] - 1] += List_px[i][1]
for i in range(N - 1):
    count_list[List_ab[i][1] - 1] += count_list[List_ab[i][0] - 1]
print((*count_list))

import sys

sys.setrecursionlimit(10**6)
import sys


def input():
    return sys.stdin.readline()[:-1]


N, Q = list(map(int, input().split()))
graph = [[] for _ in range(N)]
point = [0] * N
for _ in range(N - 1):
    a, b = list(map(int, input().split()))
    graph[a - 1].append(b - 1)
    graph[b - 1].append(a - 1)
# print(graph)
for _ in range(Q):
    a, b = list(map(int, input().split()))
    a = a - 1
    point[a] += b
# dfsを用いて累積和を計算する
# 初期状態だと前の値がないためデフォルト引数に-1を代入
def dfs(now, prev=-1):
    for next in graph[now]:
        # 次のノードが前に参照した値の時はcontinue
        if next == prev:
            continue
        # 現在の値を次のポイントに加算することで累積和をとる
        point[next] += point[now]
        # 次のノードと現在のノードを引数にdfsを継続する
        dfs(next, now)


dfs(0)
print((*point))

-N, Q = list(map(int, input().split()))  # 複数の数字を変数に格納 -List_ab = [list(map(int, input().split())) for i in range(N - 1)]  # [[1,2],[3,4],[5,6]] -List_px = [list(map(int, input().split())) for i in range(Q)]  # [[1,2],[3,4],[5,6]] -count_list = [0] * N -List_ab.sort() -for i in range(Q): -    count_list[List_px[i][0] - 1] += List_px[i][1] -for i in range(N - 1): -    count_list[List_ab[i][1] - 1] += count_list[List_ab[i][0] - 1] -print((*count_list)) +import sys + +sys.setrecursionlimit(10**6) +import sys + + +def input(): +    return sys.stdin.readline()[:-1] + + +N, Q = list(map(int, input().split())) +graph = [[] for _ in range(N)] +point = [0] * N +for _ in range(N - 1): +    a, b = list(map(int, input().split())) +    graph[a - 1].append(b - 1) +    graph[b - 1].append(a - 1) +# print(graph) +for _ in range(Q): +    a, b = list(map(int, input().split())) +    a = a - 1 +    point[a] += b +# dfsを用いて累積和を計算する +# 初期状態だと前の値がないためデフォルト引数に-1を代入 +def dfs(now, prev=-1): +    for next in graph[now]: +        # 次のノードが前に参照した値の時はcontinue +        if next == prev: +            continue +        # 現在の値を次のポイントに加算することで累積和をとる +        point[next] += point[now] +        # 次のノードと現在のノードを引数にdfsを継続する +        dfs(next, now) + + +dfs(0) +print((*point))