#include<stdio.h>
#include<iostream>
#include<algorithm>
#include<string.h>
#include<vector>
#include<cmath>
#include<string>
#include<map>
#include<queue>
using namespace std;
typedef long long ll;
struct node {
ll id;
ll d;
ll next_s;
}side[501];
ll head[501], in[501];
ll cnt ;
ll ans[501];
void add(ll x, ll y, ll d) {
side[cnt].id = y;
side[cnt].d = d;
side[cnt].next_s = head[x];
head[x] = cnt++;
}
int main() {
ll n, m;
while (cin >> n >> m) {
cnt=0;
memset(head, -1, sizeof(head));
memset(in, 0, sizeof(in));
ll x, y;
for (int i = 1; i <= m; i++) {
cin >> x >> y;
add(x, y, 0);
in[y]++;
}
priority_queue<ll, vector<ll>, greater<ll> >p;
//把所有入度为零的点入队
for (int i = 1; i <= n; i++) {
if (in[i] == 0)
p.push(i);
}
ll k = 0;
while (p.size()) {
ll x = p.top();
ans[k++] = x;//ans排序储存
p.pop();
//删除由x发出的边
for (int i = head[x]; i != -1; i = side[i].next_s) {
ll y = side[i].id;
in[y]--;
if (in[y] <= 0)
p.push(y);
}
}
for (int i = 0; i < k - 1; i++) {
cout << ans[i] << " ";
}
cout << ans[k - 1] << endl;
}
return 0;
}