#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
using namespace std;
int num1, num2;
vector<int> cnt[100005];
int max_anser[100005];
bool flag[100005];
void Find(int nums) {
memset(flag, false, sizeof flag);
queue<int> q;
q.push(nums);
while (!q.empty()) {
int t = q.front();
for (int i = 0; i < cnt[t].size(); i++) {
if (flag[cnt[t][i]] == false) {
q.push(cnt[t][i]);
flag[cnt[t][i]] = true;
max_anser[nums] = max(max_anser[nums], cnt[t][i]);
}
}
q.pop();
}
}
int main(){
cin >> num1 >> num2;
for (int i = 1; i <= num1; i++) {
max_anser[i] = i;
}
for (int i = 0; i < num2; i++) {
int start, end;
cin >> start >> end;
cnt[start].push_back(end);
}
for (int i = 1; i <= num1; i++)
Find(i);
for (int i = 1; i <= num1; i++)
cout << max_anser[i] << " ";
return 0;
}