#include <bits/stdc++.h>
using namespace std;
const char iname[] = "sortaret.in";
const char oname[] = "sortaret.out";
#define INF (1 << 30)
static constexpr int NMAX = (int)1e5 + 5;
vector<int> adj[NMAX];
void dfs(int node, vector<bool>& visited, vector<int>& topsort) {
visited[node] = true;
for (auto& neigh : adj[node]) {
if (!visited[neigh]) {
dfs(neigh, visited, topsort);
}
}
topsort.push_back(node);
}
int main() {
ifstream in(iname);
int N, M;
in >> N >> M;
for (int i = 1, x, y; i <= M; ++i) {
in >> x >> y;
adj[x].push_back(y);
}
in.close();
vector<int> topsort;
vector<bool> visited(N + 1);
for (int i = 1; i <= N; ++i) {
if (!visited[i]) {
dfs(i, visited, topsort);
}
}
reverse(topsort.begin(), topsort.end());
ofstream out(oname);
for (auto& value : topsort) {
out << value << ' ';
}
out.close();
return 0;
}