#include<iostream>
#include<vector>
#include<queue>
using namespace std;
#define MAX 0x3f3f3f3f
const int N = 1e5 + 5;
vector<int> a[N];
queue<int> q;
int n, m;
int in[N], print[N];
bool topoSort()
{
int x = 0;
for (int i = 1; i <= n; i++)
{
if (in[i] == 0)
{
q.push(i);
print[x++] = i;
}
}
while (!q.empty())
{
int i = q.front();
for (int j = 0; j < a[i].size(); j++)
{
if (in[a[i][j]])
{
in[a[i][j]]--;
if (in[a[i][j]] == 0)
{
q.push(a[i][j]);
print[x++] = a[i][j];
}
}
}
q.pop();
}
if (x == n) return true;
else return false;
}
int main()
{
int num1, num2;
scanf("%d %d", &n, &m);
for (int i = 0; i < m; i++)
{
scanf("%d %d", &num1, &num2);
a[num1].push_back(num2);
in[num2]++;
}
if (topoSort())
{
for (int i = 0; i < n; i++)
printf("%d ", print[i]);
}
else printf("-1");
return 0;
}