#include <iostream>
#include <sstream>
#include <fstream>
#include <string>
#include <vector>
#include <deque>
#include <queue>
#include <stack>
#include <set>
#include <map>
#include <algorithm>
#include <functional>
#include <utility>
#include <bitset>
#include <cmath>
#include <cstdlib>
#include <ctime>
#include <cstdio>
#include <stdio.h>
#include <string.h>
#include <cassert>

using namespace std;

static const double EPS = 1e-9;
template<class T> bool INRANGE(T x, T a, T b) { return a <= x && x <= b; }
template<class T> void amin(T &a, T v) { if (a > v) a = v; }
template<class T> void amax(T &a, T v) { if (a < v) a = v; }
int ROUND(double x) { return (int)(x + 0.5); }
bool ISINT(double x) { return fabs(ROUND(x) - x) <= EPS; }
bool ISEQUAL(double x, double y) { return fabs(x - y) <= EPS * max(1.0, max(fabs(x), fabs(y))); }
double SQSUM(double x, double y) { return x * x + y * y; }
#define PI  (acos(-1))
#define ARRAY_NUM(a) (sizeof(a)/sizeof(a[0])) 
#define NG (-1)
#define BIG ((int)1e9+10)
#define BIGLL ((ll)4e18)
#define SZ(a) ((int)(a).size())
#define SQ(a) ((a)*(a))
typedef unsigned long long ull;
typedef long long ll;


// ふくざつな強連結成分分解(SCC : Strongly Connected Componet)、トポロジカルソート、2-SAT
class SCC
{
public:
	int V;						// 頂点数
	vector < vector <int> > G;	// 隣接リスト
	vector < vector <int> > rG;	// 隣接リスト逆
	vector <int> vs;			// 帰りがけ順の並び
	vector <bool> used;			// すでに調べたか
	vector <int> cmp;			// 属する強連結成分のトポロジカル順序 cmp[頂点番号]=強連結成分番号（トポロジカル順序で）

	int numscc;
	vector < vector <int> > vtxids;	// [強連結成分番号]={vtxid, vtxid, vtxid}

	SCC(int v)
	{
		V = v;
		init();
	}

	// 隣接リストはinitでクリアしてから、add_edgeしはじめましょう。
	void init()
	{
		G.clear();
		G.resize(V);
		rG.clear();
		rG.resize(V);
		vs.clear();
		used.clear();
		used.resize(V);
		cmp.clear();
		cmp.resize(V);
		vtxids.clear();
		numscc = 0;
	}

	//      (a || b)
	//  =   (!a⇒b && !b⇒a) エッジにたすときはこれ

	//     !(a && b)
	//  =  !a || !b
	//  =  (a⇒!b && b⇒!a) エッジにたすときはこれ
	void add_edge(int from, int to)
	{
		G[from].push_back(to);
		rG[to].push_back(from);
	}

	void dfs(int v)
	{
		used[v] = true;
		for (int i = 0; i<SZ(G[v]); i++)
		{
			if (!used[G[v][i]]) dfs(G[v][i]);
		}
		vs.push_back(v);
	}

	void rdfs(int v, int k)
	{
		used[v] = true;
		cmp[v] = k;
		for (int i = 0; i<SZ(rG[v]); i++)
		{
			if (!used[rG[v][i]]) rdfs(rG[v][i], k);
		}
	}

	// 2-SAT、充足できるか？ する場合は、true,falseの割り当て方をresultに返す
	bool IsSatisfied(vector <bool>& result)
	{
		const int N = V / 2;
		for (int i = 0; i < N; i++)
		{
			if (cmp[i] == cmp[i + N]) // 同じ強連結成分に、xとnot xが含まれている。矛盾。
			{
				return false;
			}
		}

		result.resize(N);
		for (int i = 0; i < N; i++)
		{
			if (cmp[i]>cmp[i + N])
			{
				result[i] = true;
			}
			else
			{
				result[i] = false;
			}
		}

		return true;
	}

	// 返り値は、強連結成分の数を返す。
	// つまり、0≦cmp[頂点番号]=強連結成分番号＜返り値
	// もし、頂点数＝返り値なら、閉路をもたないグラフである。
	int go()
	{
		used.resize(V);
		fill(used.begin(), used.end(), false);
		vs.clear();
		for (int v = 0; v<V; v++)
		{
			if (!used[v]) dfs(v);
		}
		used.resize(V);
		fill(used.begin(), used.end(), false);
		int k = 0;
		for (int i = SZ(vs) - 1; i >= 0; i--)
		{
			if (!used[vs[i]]) rdfs(vs[i], k++);
		}
		numscc = k;

		calcData();	// 各種データの計算。必ずしも必要ではないので、必要に応じて端折ってよい。

		return numscc;
	}

	void calcData()
	{
		// 強連結成分に含まれる頂点数を計算する
		vtxids.clear();
		vtxids.resize(numscc);
		for (int i = 0; i < V; i++)
		{
			vtxids[cmp[i]].push_back(i);
		}
	}

};


int main() 
{
	int N, M;
	scanf("%d %d ", &N, &M);

	vector <int> a(N+M);
	vector <int> b(N + M);
	vector <bool> isRoot(N, true);

	SCC scc(N);

	for (int i = 0; i < N+M-1; ++i)
	{
		scanf("%d %d ", &a[i], &b[i]);
		a[i]--;
		b[i]--;

		isRoot[b[i]] = false;
		scc.add_edge(a[i], b[i]);
	}
	
	

	scc.go();

	// 属する強連結成分のトポロジカル順序 cmp[頂点番号]=強連結成分番号（トポロジカル順序で）

	vector <int> parent(N, NG);
	vector <int> maxTopo(N, NG);
	for (int i = 0; i < N + M - 1; ++i)
	{
		if (maxTopo[b[i]] < scc.cmp[a[i]]) // より下流のやつが親か？
		{
			parent[b[i]] = a[i];
			maxTopo[b[i]] = scc.cmp[a[i]];
		}
	}

	for (int i = 0; i < N; ++i)
	{
		printf("%d\n", parent[i] + 1);
	}

	return 0;
}


Measured memory_bytes: 20728