#include <algorithm>
#include <array>
#include <complex>
#include <cassert>
#include <cctype>
#include <climits>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <ctime>
#include <functional>
#include <iomanip>
#include <iostream>
#include <map>
#include <memory>
#include <queue>
#include <set>
#include <string>
#include <tuple>
#include <vector>

using namespace std;

typedef long long ll;
typedef unsigned long long ull;

inline bool valid(const int x, const int r) { return 0 <= x && x < r; }

void initIOStream() {
  ios::sync_with_stdio(false); // stdin????????¨???????????????
  cin.tie(0); // cin?????????flush?????????
  cout.setf(ios::fixed);
  cout.precision(10); // ?????¨?????\?????????????????°??¨???
}

const int MAX_V = 20;

vector<int> ans;
vector<int> G[MAX_V];
bool vis[MAX_V];
int ind[MAX_V];

void dfs(int p){
  vis[p] = true;
  for(size_t i = 0, size = G[p].size(); i < size; ++i) {
    const auto& j = G[p][i];
    if(!vis[j]){
      dfs(j);
    }
  }
  ans.push_back(p);
}

int main() {
  initIOStream();

  int m, n;
  cin >> m >> n;
  memset(ind, 0, sizeof(ind));
  for(int i = 0; i < n; ++i) {
    int a, b;
    cin >> a >> b;
    G[b - 1].push_back(a - 1);
    ++ind[a - 1];
  }
  memset(vis, 0, sizeof(vis));
  for(int i = 0; i < m; ++i) {
    if(ind[i] == 0 && !vis[i]){
      dfs(i);
    }
  }
  for(auto x : ans){
    cout << x + 1 << endl;
  }
}