#include<iostream>
using namespace std;
struct listNode {
int data;
listNode* next;
listNode(int data1, listNode* next1 = nullptr) {
data = data1;
next = next1;
}
};
listNode* N[100000];
void appendNode(int, int);
int main() {
int n, m;
cin >> n >> m;
for (int i = 0; i < n; i++) {
N[i] = new listNode(0);
}
int x, y;
for (int i = 0; i < m; i++) {
cin >> x >> y;
appendNode(x,y-1);
}
N[0]->data = 1;
N[0]->next = nullptr;
cout << N[0]->data << endl;
for (int i = 1; i < n; i++) {
int ab=0;
listNode* p = nullptr;
p = N[i]->next;
while (p!=nullptr) {
if ((N[(p->data) - 1]->data) >= ab) {
ab = (N[(p->data) - 1]->data);
}
p = p->next;
}
N[i]->data = ab + 1;
cout << N[i]->data << endl;
}
for (int i = 0; i < n; i++) {
delete[]N[i];
}
return 0;
}
void appendNode(int x, int i) {
listNode* ptr = N[i];
listNode* ptr1 = nullptr;
while (ptr->next!=nullptr) {
ptr = ptr->next;
}
ptr->next = new listNode(x);
}