#include<bits/stdc++.h>
using namespace std;
struct edge{
int u,v;
}e[100010];
int fir[1000005],las[1000005],d[1000005],maxx=-1;
int maxxx=-1;
bool b[1000005];
bool cmp(edge x,edge y){
if(x.u==y.u) return x.v<y.v;
else return x.u<y.u;
}
void dfs(int u){
b[u]=true;
maxx=max(maxx,u);
for(int i=fir[u];i<=las[u];i++){
int v=e[i].v;
if(v!=0 and !b[v]) dfs(v);
}
}
void bfs(int u){
memset(b,false,sizeof(b));
d[1]=u;
b[u]=true;
int h=1,r=1;
while(h<=r){
int u=d[h];
for(int i=fir[u];i<=las[u];i++){
int v=e[i].v;
if(v!=0 and !b[v]){
d[++r]=v;
b[v]=true;
}
}
h++;
maxxx=max(maxxx,u);
}
}
int main(){
int n,m;
cin>>m>>n;
for(int i=1;i<=n;i++){
cin>>e[i].u>>e[i].v;
}
sort(e+1,e+1+n,cmp);
for(int i=1;i<=n+1;i++){
int u=e[i].u;
int v=e[i-1].u;
if(u!=v){
fir[u]=i;
las[v]=i-1;
}
}
for(int i=1;i<=m;i++){
dfs(i);
if(maxx==m){
cout<<maxx<<" ";
maxx=-1;
}
else{
bfs(i);
cout<<max(maxx,maxxx)<<" ";
maxx=maxxx=-1;
}
}
}