#define _USE_MATH_DEFINES
#define INF 0x3f3f3f3f
#include <cstdio>
#include <iostream>
#include <sstream>
#include <cmath>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <stack>
#include <limits>
#include <map>
#include <string>
#include <cstring>
#include <set>
#include <deque>
#include <bitset>
#include <list>
#include <cctype>
#include <utility>
#include <complex>
 
using namespace std;
 
typedef long long ll;
typedef pair <int,int> P;
typedef pair <int,P > PP;
 

static const int tx[] = {0,1,0,-1};
static const int ty[] = {-1,0,1,0};
 
static const double EPS = 1e-10;

int total_players;
int total_messages;

int find(int idx,int parent[21]){
  if(parent[idx] == idx) return idx;
  else return find(parent[idx],parent);
}


vector<int> child[21];

int bfs(int root,bool visited[21]){
  queue<int> que;
  que.push(root);
  while(!que.empty()){
    int current = que.front();
    que.pop();
    if(visited[current]) continue;

    if(current != 0){
      printf("%d\n",current);
    }

    visited[current] = true;

    for(int i=0;i<child[current].size();i++){
      int next = child[current][i];
      if(visited[next]) continue;
      que.push(next);
    }
  }
}

int main(){
  while(~scanf("%d %d",&total_players,&total_messages)){
    for(int i=1;i<=20;i++){
      child[i].clear();
    }

    bool has_parent[21];
    memset(has_parent,false,sizeof(has_parent));
    for(int message_idx = 0; message_idx < total_messages; message_idx++){
      int x,y;
      //x entered the room earlier than y
      scanf("%d %d",&x,&y);
      child[x].push_back(y);
      has_parent[y] = true;
    }

    bool visited[21];
    memset(visited,false,sizeof(visited));

    for(int i=1;i<=total_players;i++){
      if(has_parent[i]) continue;
      child[0].push_back(i);
    }

    bfs(0,visited);
  }
}