#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <stack>

using namespace std;

struct Info{
	int id,num;
};

bool isContain(int array[],int size,int id){
	for(int i=0; i < size; i++){
		if(array[i] == id)return true;
	}
	return false;
}

int main(){

	int member_num,n,table[21][21],num_of_smaller[21],first,second,fixed[21],fixed_index = 0,label = 100000,data_dealt_num = 0;

	scanf("%d",&member_num);
	Info member[member_num];
	stack<int> tmp_store;

	for(int i=1; i <= member_num; i++){
		for(int k=1; k <= member_num; k++)table[i][k] = 0;
		num_of_smaller[i] = 0;
		member[i-1].id = i;
		fixed[i-1] = 0;
	}

	scanf("%d",&n);
	for(int i = 0; i < n; i++){
		scanf("%d %d",&first,&second);
		table[first][second] = 1;
		num_of_smaller[first]++;
	}

	for(int i = 1; i <= member_num; i++){
		if(num_of_smaller[i] == 0){
			fixed[fixed_index++] = i;
			member[i-1].num = label--;
			break;
		}
	}

	while(data_dealt_num < n){

		for(int i=1; i <= member_num; i++){
			if(isContain(fixed,fixed_index,i) == false){
				bool flg = true;
				for(int k= 1; k <= member_num; k++){
					if(table[i][k] == 1 && isContain(fixed,fixed_index,k) == false){
						flg = false;
						break;
					}
				}

				if(flg){
					tmp_store.push(i);
					data_dealt_num += num_of_smaller[i];
				}
			}
		}

		while(!tmp_store.empty()){
			fixed[fixed_index++] = tmp_store.top();
			member[tmp_store.top()-1].num = label;
			tmp_store.pop();
		}
		label--;
	}

	for(int i=1; i <= member_num-1; i++){
		for(int k=member_num-1; k >= i; k--){
			if(member[k].num < member[k-1].num)swap(member[k],member[k-1]);
		}
	}

	for(int i=0; i < member_num; i++){
		printf("%d\n",member[i].id);
	}

    return 0;
}