#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
using namespace std;
ifstream fin("sortaret.in");
ofstream fout("sortaret.out");
int main() {
int n, m, x, y;
fin >> n >> m;
vector<vector<int>> adj_list(n + 1, vector<int>());//nod
vector<int> grade_interne(n + 1, 0);
queue<int> coada;
for (int i = 1; i <= m; i++) {
fin >> x >> y;
adj_list[x].push_back(y);
grade_interne[y]++;
}
for (int i = 1; i <= n; i++) {
//cout << grade_interne[i]<<" ";
if (!grade_interne[i])
coada.push(i);
}
while (!coada.empty()) {
int nod = coada.front();//cred ca si varianta cu back e corecta
coada.pop();
for (auto v : adj_list[nod]) {
grade_interne[v]--;
if (grade_interne[v] == 0)
coada.push(v);
}
fout << nod << " ";
grade_interne[nod] = -1;//ca sa fie ignorat la urmatoarele verificari
}
return 0;
}