#include <cstdio>
#include <cstring>
#include <iostream>
#include <vector>
using namespace std;
const int maxn = 100;
int n, m, vis[maxn + 10], pr[maxn + 10], cnt;
vector<int> G[maxn + 5];
bool dfs(int u) {
vis[u] = -1;
for (vector<int>::iterator i = G[u].begin(); i != G[u].end(); i++) {
if (vis[*i] == -1)
return false;
else if (!vis[*i] && !dfs(*i))
return false;
}
vis[u] = 1;
pr[cnt--] = u;
return true;
}
bool toposort() {
memset(vis, 0, sizeof(vis));
for (int u = 1; u <= n; u++) {
if (!vis[u]) {
if (!dfs(u)) return false;
}
}
return true;
}
int main()
{
while (~scanf("%d%d", &n, &m) && (n || m)) {
for (int i = 1; i <= n; i++) G[i].clear();
for (int i = 0; i < m; i++) {
int u, v;
scanf("%d%d", &u, &v);
G[u].push_back(v);
}
cnt = n;
if (toposort()) {
for (int i = 1; i <= n; i++) {
printf(i == 1 ? "%d" : " %d", pr[i]);
}
puts("");
}
}
return 0;
}