#include<bits/stdc++.h>
using namespace std;

typedef long long lint;
typedef pair<int, int> P;
#define REP(i, x, n) for(int i = x ; i < n ; ++i)
#define rep(i, n) for(int i = 0 ; i < n ; ++i)
#define repr(i, n) for(int i = n - 1 ; i >= 0 ; --i)
#define ALL(x) (x).begin(), (x).end()
#define SORT(x) sort((x).begin(), (x).end())

const int IINF = 1e9 + 10;
const long long LLINF = (long long)1e18 + 10;
const long long MOD = (long long)1e9 + 7;
const int dx4[] = {1, 0, -1, 0}, dy4[] = {0, 1, 0, -1};
const int dx8[] = {1, 1, 0, -1, -1, -1, 0, 1}, dy8[] = {0, -1, -1, -1, 0, 1, 1, 1};
const double EPS = 1e-8;

vector< vector<int> > g;
vector< P > dis;

void dfs(int now, int depth, vector<bool> done){
    done[now] = true;
    dis[now].first = max(dis[now].first, depth);
    rep(i, g[now].size()){
        if(!done[g[now][i]]){
            dfs(g[now][i], depth + 1, done);
        }
    }
    return;
}

int main(){
    int m, n;
    cin >> m >> n;
    g.resize(m);
    dis.resize(m);
    rep(i, m){
        dis[i].first = -1;
        dis[i].second = i;
    }
    vector<int> degree(m);
    bool flag = false;
    rep(i, n){
        int x, y;
        cin >> x >> y;
        --x;
        --y;
        g[y].push_back(x);
        ++degree[x];
        if(y == 1){
            flag = true;
        }
    }
    if(!flag){
        int j = -1;
        rep(i, m){
            if(degree[i] == 0 && i != 1){
                j = i;
                break;
            }
        }
        g[1].push_back(j);
    }
    vector<bool> done(m);
    dfs(1, 0, done);
    SORT(dis);
    repr(i, m){
        cout << dis[i].second + 1 << endl;
    }
    return 0;
}
