#include <iostream>
#include <string>
#include <sstream>
#include <algorithm>
#include <vector>
#include <utility>
#include <functional>
#include <stack>
#include <queue>
#include <map>
#include <set>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <deque>
 
using namespace std;
 
#define REP(i,s,e) for(int i=(s); i<(int)(e); i++)
#define rep(i,n) REP(i,0,(n))
#define pb(n) push_back(n)
#define mp(n,m) make_pair(n, m)
#define all(r) r.begin(),r.end()
#define fi first
#define se second
#define println(X) cout<<X<<endl;
 
 
typedef long long ll;
typedef vector<int> vi;
typedef vector<vi> vii;
typedef vector<ll> vl;
typedef vector<vl> vll;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;

const int INF = 1e9;

bool comp(pair<vi, int> p1,pair<vi, int>p2){
	return p1.fi.size()<p2.fi.size();
}

int main(){
	int m, n;
	cin>>m>>n;
	vector<pair<vi, int> > v(m);
	for(int i = 0; i < m; i++){
		v[i].se = i;
	}
	int x, y;
	rep(i, n){
		cin>>x>>y;
		x--; y--;
		v[x].fi.pb(y);
	}
	vi ans;
	int idx;
	sort(all(v), comp);
	reverse(all(v));
	// for(int i = 0; i < v.size(); i++){
	// 	cout<<v[i].se+1<<endl;
	// }
	// cout<<endl;
	for(int i = 0; i < m; i++){
		int idx = ans.size();
		sort(all(v[i].fi));
		for(int j = 0; j < v[i].fi.size(); j++){
			for(int k = 0; k < ans.size(); k++){
				if(v[i].fi[j]==ans[k]){
					idx = min(idx, k);
					//printf("%d %d\n", v[i].se+1, k);
					break;
				}
			}
		}
		ans.insert(ans.begin()+idx,v[i].se);
		// for(int d = 0; d < ans.size(); d++){
		// 	cout<<" "<<ans[d];
		// }
		// cout<<endl;
	}
	for(int i = 0; i < ans.size(); i++){
		cout<<ans[i]+1<<endl;
	}
}