#include <bits/stdc++.h>
using namespace std;
struct node {
  int val, v;
};
vector<int> vc[100005], rev[100005];
int ara[100005];
node tree[100005 * 5];
node fun(node gr, node pr) {
  if (gr.val == pr.val) {
    if (gr.v < pr.v) return pr;
    return gr;
  }
  if (gr.val < pr.val) return gr;
  return pr;
}
void update(int node, int st, int en, int l, int val) {
  if (st > l or en < l) return;
  if (st == en) {
    tree[node].val += val;
    return;
  }
  int mid = (st + en) / 2;
  update(node * 2, st, mid, l, val);
  update(node * 2 + 1, mid + 1, en, l, val);
  tree[node] = fun(tree[node * 2], tree[node * 2 + 1]);
}
void build(int node, int st, int en) {
  if (st == en) {
    tree[node].val = 0;
    tree[node].v = st;
    return;
  }
  int mid = (st + en) / 2;
  build(node * 2, st, mid);
  build(node * 2 + 1, mid + 1, en);
  tree[node] = fun(tree[node * 2], tree[node * 2 + 1]);
}
int main() {
  int i, j, k, l, m, n;
  cin >> n >> m;
  build(1, 1, n);
  for (i = 1; i <= m; i++) {
    cin >> l >> k;
    rev[k].push_back(l);
    update(1, 1, n, l, 1);
  }
  int ma = n;
  while (ma) {
    node gr = tree[1];
    for (int i = 0; i < rev[gr.v].size(); i++) {
      update(1, 1, n, rev[gr.v][i], -1);
    }
    update(1, 1, n, gr.v, 100005 + 5);
    ara[gr.v] = ma;
    ma--;
  }
  for (int i = 1; i <= n; i++) cout << ara[i] << " ";
}
