#include<iostream>
#include<vector>
#include<algorithm>
#include<cctype>
#include<utility>
#include<string>
#include<cmath>
#include<cstring>
#include<queue>
#include<map>
#include<climits>

#define REP(i, n) for(int i = 0;i < n;i++)
#define REPR(i, n) for(int i = n;i >= 0;i--)
#define FOR(i, m, n) for(int i = m;i < n;i++)
#define FORR(i, m, n) for(int i = m;i >= n;i--)
#define SORT(v, n) sort(v, v+n);
#define VSORT(v) sort(v.begin(), v.end());
#define llong long long
#define pb(a) push_back(a)
using namespace std;
typedef pair<int, int> P;
typedef long long int ll;
typedef pair<ll,ll> LLP;
#define INF 1000000007

#define ARRAY_MAX 105

void dfs(int now,vector<vector<int> >& g,vector<bool>& used,vector<int>& ans){

    used[now] = true;
    for(auto to : g[now]){
        if(used[to] > 0){
            continue;
        }
        dfs(to,g,used,ans);
    }
    ans.push_back(now+1);
}


void Topological_Sort(int v,int e,vector<vector<int> >& g,vector<bool>& used,vector<int>& ans){

    for(int i = 0;i < v;++i){
        if(used[i] == true){
            continue;
        }
        dfs(i,g,used,ans);
    }
    reverse(ans.begin(),ans.end());
}


int main(){

    int m,n;
    cin >> m >> n;
    vector<vector<int> > g(ARRAY_MAX);
    vector<bool> used(ARRAY_MAX,false);
    vector<int> ans;

    REP(i,n){
        int x,y;
        cin >> x >> y;
        x--;
        y--;
        g[x].push_back(y);
    }

    Topological_Sort(m,n,g,used,ans);
    REP(i,ans.size()){
        cout << ans[i] << endl;
    }  


    return 0;
}
