#include <iostream>
#include <stack>
#include <queue>
#include <deque>
#include <vector>
#define rep(i, a, b) for(int i = a; i < (b); ++i)
#define trav(a, x) for(auto& a : x)
#define all(x) x.begin(), x.end()
#define sz(x) (int)(x).size()


using namespace std;
typedef long long ll;
typedef pair<int, int> pii;
typedef vector<int> vi;

int G[50][50];
int n, m;
void dfs(int s, int v){
    G[s][v] = 1;
    if(v!=s)G[v][s] = -1;
    rep(u, 0, n){
        if(G[v][u]==1){
            dfs(s, u);
        }
    }
}
int main() {


    cin >> n >> m;
    rep(i,0,n) rep(j,0,n) G[i][j]=0;
    rep(i, 0, m) {
        int x, y; cin >> x >> y;
        x--;
        y--;
        G[x][y] = 1;
        G[y][x] = -1;
    }
    bool checked[50];
    rep(i,0,n) rep(j,0,n) {
            if(G[i][j]==1){
                dfs(i, j);
            }
            checked[i] = false;
        }
    vector<int> v;

    bool update=true;
    while(update){
        update = false;

        if(v.size()==n) break;
        rep(i,0,n){
            if(checked[i]) continue;
            bool judge = true;
            rep(j,0,n){
                if(checked[j]) continue;
                if(G[i][j]==-1) judge= false;
            }

            if(judge){
                update = true;
                v.push_back(i+1);
                checked[i] = true;
                rep(j,0,n) G[j][i]=1, G[i][j]=1;
                break;
            }
        }

    }

    for(auto e: v) cout << e << endl;

    return 0;
}
