#include <iostream>
#include <vector>
#include <string>
#include <stack>
#include <algorithm>

using namespace std;

//
//void p(vector<int> v){
//	for(int j = 0; j < v.size(); j++){
//		cout << v[j] << " ";
//	}
//	cout << endl;
//}
//
//void p(vector<vector<int> > v){
//	for(int i = 0; i < v.size(); i++){
//		p(v[i]);
//	}
//}

void tsort(vector<vector<int> > v, vector<int> &ret){
	for(int i = 1; i < v.size(); i++){	// 正方2次元配列なのでv.size
		bool ishead = true;
		for(int j = 1; j < v.size() && ishead; j++){
			// 縦に見る、縦が全て0ならば先頭の可能性あり
			ishead &= (v[j][i] == 0);
		}
		if(ishead == true){
			ret.push_back(i);
			// iに繋がっているものを消す
			for(int j = 1; j < v.size(); j++){
				v[i][j] = 0;
			}
			v[i][i] = 2;	// 縦が全て0になるのを防止
			i = 1; // 最初からやり直し
		}
	}
}

int main(){
	int m, n;
	cin >> m >> n;

	m++;
	vector<vector<int> > v(m);

	for(int i = 0; i < m; i++){
		v[i].resize(m, 0);
	}

	while(n--){
		int x, y;
		cin >> x >> y;
		v[x][y] = 1;
	}

//	p(v);
	vector<int> sorted;
	tsort(v, sorted);

//	p(v);
//	p(sorted);

	for(int i = 0; i < sorted.size(); i++){
		cout << sorted[i] << endl;
	}

	return 0;
}