import sys
sys.setrecursionlimit(1 << 25)
input = sys.stdin.readline
class BIT:
def __init__(self, n):
self.N = n + 2
self.tree = [0] * (self.N)
def update(self, idx, val):
while idx < self.N:
self.tree[idx] += val
idx += idx & -idx
def query(self, idx):
res = 0
while idx > 0:
res += self.tree[idx]
idx -= idx & -idx
return res
def range_add(self, l, r, val):
self.update(l, val)
self.update(r + 1, -val)
N, M = map(int, input().split())
# 트리 생성
tree_joi = [[] for _ in range(N+1)]
tree_ioi = [[] for _ in range(N+1)]
root_j = root_i = 0
for i in range(1, N+1):
Pj, Pi = map(int, input().split())
if Pj == 0:
root_j = i
else:
tree_joi[Pj].append(i)
if Pi == 0:
root_i = i
else:
tree_ioi[Pi].append(i)
# IOI 社 프로젝트 관련
proj = [[] for _ in range(N+1)]
for _ in range(M):
Rb, Sb = map(int, input().split())
proj[Sb].append(Rb)
# JOI 社 직원 Euler Tour
tin = [0]*(N+1)
tout = [0]*(N+1)
time = 0
def dfs_joi(u):
global time
time += 1
tin[u] = time
for v in tree_joi[u]:
dfs_joi(v)
tout[u] = time
dfs_joi(root_j)
# BIT + DFS
bit = BIT(N+2)
ans = [0]*(N+1)
def dfs_ioi(u):
# 현재 IOI 社 직원 u가 리더인 프로젝트 처리
for r in proj[u]:
bit.range_add(tin[r], tout[r], 1)
# IOI 社 직원 u의 스파이 성공 횟수
ans[u] = bit.query(tin[u])
for v in tree_ioi[u]:
dfs_ioi(v)
# 되돌리기
for r in proj[u]:
bit.range_add(tin[r], tout[r], -1)
dfs_ioi(root_i)
for i in range(1, N+1):
print(ans[i])
aW1wb3J0IHN5cwpzeXMuc2V0cmVjdXJzaW9ubGltaXQoMSA8PCAyNSkKaW5wdXQgPSBzeXMuc3RkaW4ucmVhZGxpbmUKCmNsYXNzIEJJVDoKICAgIGRlZiBfX2luaXRfXyhzZWxmLCBuKToKICAgICAgICBzZWxmLk4gPSBuICsgMgogICAgICAgIHNlbGYudHJlZSA9IFswXSAqIChzZWxmLk4pCiAgICBkZWYgdXBkYXRlKHNlbGYsIGlkeCwgdmFsKToKICAgICAgICB3aGlsZSBpZHggPCBzZWxmLk46CiAgICAgICAgICAgIHNlbGYudHJlZVtpZHhdICs9IHZhbAogICAgICAgICAgICBpZHggKz0gaWR4ICYgLWlkeAogICAgZGVmIHF1ZXJ5KHNlbGYsIGlkeCk6CiAgICAgICAgcmVzID0gMAogICAgICAgIHdoaWxlIGlkeCA+IDA6CiAgICAgICAgICAgIHJlcyArPSBzZWxmLnRyZWVbaWR4XQogICAgICAgICAgICBpZHggLT0gaWR4ICYgLWlkeAogICAgICAgIHJldHVybiByZXMKICAgIGRlZiByYW5nZV9hZGQoc2VsZiwgbCwgciwgdmFsKToKICAgICAgICBzZWxmLnVwZGF0ZShsLCB2YWwpCiAgICAgICAgc2VsZi51cGRhdGUociArIDEsIC12YWwpCgpOLCBNID0gbWFwKGludCwgaW5wdXQoKS5zcGxpdCgpKQoKIyDtirjrpqwg7IOd7ISxCnRyZWVfam9pID0gW1tdIGZvciBfIGluIHJhbmdlKE4rMSldCnRyZWVfaW9pID0gW1tdIGZvciBfIGluIHJhbmdlKE4rMSldCnJvb3RfaiA9IHJvb3RfaSA9IDAKZm9yIGkgaW4gcmFuZ2UoMSwgTisxKToKICAgIFBqLCBQaSA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKICAgIGlmIFBqID09IDA6CiAgICAgICAgcm9vdF9qID0gaQogICAgZWxzZToKICAgICAgICB0cmVlX2pvaVtQal0uYXBwZW5kKGkpCiAgICBpZiBQaSA9PSAwOgogICAgICAgIHJvb3RfaSA9IGkKICAgIGVsc2U6CiAgICAgICAgdHJlZV9pb2lbUGldLmFwcGVuZChpKQoKIyBJT0kg56S+IO2UhOuhnOygne2KuCDqtIDroKgKcHJvaiA9IFtbXSBmb3IgXyBpbiByYW5nZShOKzEpXQpmb3IgXyBpbiByYW5nZShNKToKICAgIFJiLCBTYiA9IG1hcChpbnQsIGlucHV0KCkuc3BsaXQoKSkKICAgIHByb2pbU2JdLmFwcGVuZChSYikKCiMgSk9JIOekviDsp4Hsm5AgRXVsZXIgVG91cgp0aW4gPSBbMF0qKE4rMSkKdG91dCA9IFswXSooTisxKQp0aW1lID0gMApkZWYgZGZzX2pvaSh1KToKICAgIGdsb2JhbCB0aW1lCiAgICB0aW1lICs9IDEKICAgIHRpblt1XSA9IHRpbWUKICAgIGZvciB2IGluIHRyZWVfam9pW3VdOgogICAgICAgIGRmc19qb2kodikKICAgIHRvdXRbdV0gPSB0aW1lCmRmc19qb2kocm9vdF9qKQoKIyBCSVQgKyBERlMKYml0ID0gQklUKE4rMikKYW5zID0gWzBdKihOKzEpCgpkZWYgZGZzX2lvaSh1KToKICAgICMg7ZiE7J6sIElPSSDnpL4g7KeB7JuQIHXqsIAg66as642U7J24IO2UhOuhnOygne2KuCDsspjrpqwKICAgIGZvciByIGluIHByb2pbdV06CiAgICAgICAgYml0LnJhbmdlX2FkZCh0aW5bcl0sIHRvdXRbcl0sIDEpCiAgICAjIElPSSDnpL4g7KeB7JuQIHXsnZgg7Iqk7YyM7J20IOyEseqztSDtmp/siJgKICAgIGFuc1t1XSA9IGJpdC5xdWVyeSh0aW5bdV0pCiAgICBmb3IgdiBpbiB0cmVlX2lvaVt1XToKICAgICAgICBkZnNfaW9pKHYpCiAgICAjIOuQmOuPjOumrOq4sAogICAgZm9yIHIgaW4gcHJvalt1XToKICAgICAgICBiaXQucmFuZ2VfYWRkKHRpbltyXSwgdG91dFtyXSwgLTEpCgpkZnNfaW9pKHJvb3RfaSkKCmZvciBpIGluIHJhbmdlKDEsIE4rMSk6CiAgICBwcmludChhbnNbaV0p