#!/usr/bin/env python3



import sys

import math

from bisect import bisect_right as br

from bisect import bisect_left as bl

sys.setrecursionlimit(2147483647)

from heapq import heappush, heappop,heappushpop

from collections import defaultdict

from itertools import accumulate

from collections import Counter

from collections import deque

from operator import itemgetter

from itertools import permutations

mod = 10**9 + 7

inf = float('inf')

def I(): return int(sys.stdin.readline())

def LI(): return list(map(int,sys.stdin.readline().split()))



n,m = LI()



edges = [[] for _ in range(n)]

cnt = [[0,i] for i in range(n)]

for _ in range(n-1+m):

    a,b = LI()

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

    cnt[b-1][0] += 1





ans = [None]*n

que = deque()

for i in range(n):

    if cnt[i][0] == 0:

        que.append(cnt[i][1])

        ans[cnt[i][1]] = 0

        while que:

            v = que.popleft()

            for i in edges[v]:

                cnt[i][0] -= 1

                if cnt[i][0] == 0:

                    que.append(i)

                    ans[i] = v+1

        break

for i in ans:

    print(i)

#!/usr/bin/env python3



import sys

import math

from bisect import bisect_right as br

from bisect import bisect_left as bl

sys.setrecursionlimit(2147483647)

from heapq import heappush, heappop,heappushpop

from collections import defaultdict

from itertools import accumulate

from collections import Counter

from collections import deque

from operator import itemgetter

from itertools import permutations

mod = 10**9 + 7

inf = float('inf')

def I(): return int(sys.stdin.readline())

def LI(): return list(map(int,sys.stdin.readline().split()))



"""

[トポロジカルソート]

⇒入次数0の頂点からスタートし、その番号を1とする.

　1から出ている有向辺をすべて削除

  入次数0になった頂点の番号を2とし、2から出ている有向辺をすべて削除

  入次数0になった頂点の番号を3とし、...を繰り返す



常に入次数が0になった頂点を選択してその1つ前を親とするため、

出来上がったグラフの各頂点の親は、そのグラフで最も近い親(距離1)

つまり、後から足されたM本の辺ではない

よって、トポロジカルソートによって得られるグラフが元の木である.

"""

n,m = LI()



edges = [[] for _ in range(n)]

cnt = [[0,i] for i in range(n)]

for _ in range(n-1+m):

    a,b = LI()

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

    cnt[b-1][0] += 1





ans = [None]*n

que = deque()

for i in range(n):

    if cnt[i][0] == 0:

        que.append(cnt[i][1])

        ans[cnt[i][1]] = 0

        while que:

            v = que.popleft()

            for i in edges[v]:

                cnt[i][0] -= 1

                if cnt[i][0] == 0:

                    que.append(i)

                    ans[i] = v+1

        break

for i in ans:

    print(i)

#!/usr/bin/env python3
import sys
import math
from bisect import bisect_right as br
from bisect import bisect_left as bl

sys.setrecursionlimit(2147483647)
from heapq import heappush, heappop, heappushpop
from collections import defaultdict
from itertools import accumulate
from collections import Counter
from collections import deque
from operator import itemgetter
from itertools import permutations

mod = 10**9 + 7
inf = float("inf")


def I():
    return int(sys.stdin.readline())


def LI():
    return list(map(int, sys.stdin.readline().split()))


n, m = LI()
edges = [[] for _ in range(n)]
cnt = [[0, i] for i in range(n)]
for _ in range(n - 1 + m):
    a, b = LI()
    edges[a - 1].append(b - 1)
    cnt[b - 1][0] += 1
ans = [None] * n
que = deque()
for i in range(n):
    if cnt[i][0] == 0:
        que.append(cnt[i][1])
        ans[cnt[i][1]] = 0
        while que:
            v = que.popleft()
            for i in edges[v]:
                cnt[i][0] -= 1
                if cnt[i][0] == 0:
                    que.append(i)
                    ans[i] = v + 1
        break
for i in ans:
    print(i)

#!/usr/bin/env python3
import sys
import math
from bisect import bisect_right as br
from bisect import bisect_left as bl

sys.setrecursionlimit(2147483647)
from heapq import heappush, heappop, heappushpop
from collections import defaultdict
from itertools import accumulate
from collections import Counter
from collections import deque
from operator import itemgetter
from itertools import permutations

mod = 10**9 + 7
inf = float("inf")


def I():
    return int(sys.stdin.readline())


def LI():
    return list(map(int, sys.stdin.readline().split()))


"""
[トポロジカルソート]
⇒入次数0の頂点からスタートし、その番号を1とする.
　1から出ている有向辺をすべて削除
  入次数0になった頂点の番号を2とし、2から出ている有向辺をすべて削除
  入次数0になった頂点の番号を3とし、...を繰り返す
常に入次数が0になった頂点を選択してその1つ前を親とするため、
出来上がったグラフの各頂点の親は、そのグラフで最も近い親(距離1)
つまり、後から足されたM本の辺ではない
よって、トポロジカルソートによって得られるグラフが元の木である.
"""
n, m = LI()
edges = [[] for _ in range(n)]
cnt = [[0, i] for i in range(n)]
for _ in range(n - 1 + m):
    a, b = LI()
    edges[a - 1].append(b - 1)
    cnt[b - 1][0] += 1
ans = [None] * n
que = deque()
for i in range(n):
    if cnt[i][0] == 0:
        que.append(cnt[i][1])
        ans[cnt[i][1]] = 0
        while que:
            v = que.popleft()
            for i in edges[v]:
                cnt[i][0] -= 1
                if cnt[i][0] == 0:
                    que.append(i)
                    ans[i] = v + 1
        break
for i in ans:
    print(i)

+""" +[トポロジカルソート] +⇒入次数0の頂点からスタートし、その番号を1とする. +　1から出ている有向辺をすべて削除 +  入次数0になった頂点の番号を2とし、2から出ている有向辺をすべて削除 +  入次数0になった頂点の番号を3とし、...を繰り返す +常に入次数が0になった頂点を選択してその1つ前を親とするため、 +出来上がったグラフの各頂点の親は、そのグラフで最も近い親(距離1) +つまり、後から足されたM本の辺ではない +よって、トポロジカルソートによって得られるグラフが元の木である. +"""