#include <bits/stdc++.h>
using namespace std;
template <class T>
int getbit(T s, int i) {
  return (s >> i) & 1;
}
template <class T>
T onbit(T s, int i) {
  return s | (T(1) << i);
}
template <class T>
T offbit(T s, int i) {
  return s & (~(T(1) << i));
}
template <class T>
int cntbit(T s) {
  return s == 0 ? 0 : cntbit(s >> 1) + (s & 1);
}
int n, m;
vector<int> V1[100005], V2[100005];
bool flag1[100005], flag2[100005];
vector<int> cal(vector<int> V) {
  vector<int> res;
  int n = V.size();
  if (n <= 1) return V;
  int d = n / 2;
  for (int i = 0; i < n; i++) {
    if (i < d) flag1[V[i]] = 1;
    if (i > d) flag2[V[i]] = 1;
  }
  vector<int> rr1, rr2;
  int t = V[d], u;
  for (int i = 0; i < (int)V1[t].size(); i++) {
    u = V1[t][i];
    if (flag2[u]) {
      flag2[u] = 0;
      rr1.push_back(u);
    }
  }
  for (int i = 0; i < (int)V2[t].size(); i++) {
    u = V2[t][i];
    if (flag1[u]) {
      flag1[u] = 0;
      rr2.push_back(u);
    }
  }
  for (int i = 0; i < n; i++) {
    if (flag1[V[i]]) rr1.push_back(V[i]);
    if (flag2[V[i]]) rr2.push_back(V[i]);
    flag1[V[i]] = 0;
    flag2[V[i]] = 0;
  }
  rr1 = cal(rr1);
  rr2 = cal(rr2);
  for (int i = 0; i < (int)(rr1.size()); i++) res.push_back(rr1[i]);
  res.push_back(t);
  for (int i = 0; i < (int)(rr2.size()); i++) res.push_back(rr2[i]);
  return res;
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cin >> n >> m;
  int u, v;
  for (int run = 0; run < m; run++) {
    cin >> u >> v;
    V1[u].push_back(v);
    V2[v].push_back(u);
  }
  vector<int> V;
  for (int i = 1; i <= n; i++) V.push_back(i);
  V = cal(V);
  memset(flag1, 0, sizeof(flag1));
  memset(flag2, 0, sizeof(flag2));
  for (int i = 0; i < n; i++) cout << V[i] << " ";
}
