#define _CRT_SECURE_NO_WARNINGS
#define _USE_MATH_DEFINES

#include <stdio.h>
#include <ctype.h>
#include <string>
#include <iostream>
#include <vector>
#include <stack>
#include <fstream>
#include <sstream>
#include <queue>
#include <exception>
#include <cmath>
#include <numeric>
#include <map>

using namespace std;
typedef long long int lint;

void AOJ0119()
{
	int m, n, x, y;
	cin >> m >> n;

	//??£??\?????????
	vector< vector< int > >	list(m + 1);

	for (int i = 0; i < n; i++) {
		cin >> x >> y;
		list[x].push_back(y);
	}

	//L ??? ??????????????????????????????????????????????????????????????????
	vector< int > L;
	//S ??? ??\???????????????????????????????????????????????????
	vector< int > S;

	//??\???????????¨??????????????°
	bool* flag = new bool[m + 1];
	for (int i = 1; i <= m; i++) {
		flag[i] = true;
	}

	for (int i = 1; i <= m; i++) {
		for (auto itr = list[i].begin(); itr != list[i].end(); itr++) {
			flag[*itr] = false;
		}
	}

	for (int i = 1; i <= m; i++) {
		if (flag[i]) {
			S.push_back(i);
		}
	}

	while (!S.empty()) {
		int a = S.back();
		L.push_back(a);
		S.pop_back();
		//foreach a ???????????? e ??¨????????????????????? b do
		while (!list[a].empty()) {
			int b = list[a].back();
			list[a].pop_back();
			bool found = false;
			for (int i = 1; i <= m; i++) {
				if (find(list[i].begin(), list[i].end(), b) != list[i].end()) {
					found = true;
					break;
				}
			}
			if (!found) {
				S.push_back(b);
			}
		}
	}

	for (auto itr = L.begin(); itr != L.end(); itr++) {
		cout << *itr << endl;
	}

	delete[] flag;

	return;
}

int main()
{
	AOJ0119();
	return 0;
}