#include<bits/stdc++.h>
using namespace std;
const int MN = 2e5+9;
vector<int> s[MN],t[MN];
int X,Y,M,N,f[MN],g[MN],vis[MN],tag[MN];
int main(){
    scanf("%d%d",&N,&M);
    for(int i=1; i<=M; i++){
        scanf("%d%d",&X,&Y);
        s[Y].push_back(X);
        t[Y+1].push_back(X);
    }
    for(int i=1; i<=N; i++){
        sort(s[i].begin(),s[i].end());
        sort(t[i].begin(),t[i].end());
    }
    for(int i=1; i<=N; i++) f[i] = i;
    for(int i=1; i<=N; i++) g[i] = i;
    memset(vis,0,sizeof(vis));
    for(int i=1,j; i<=N; i++){
        if(s[i].size()==0) continue;
        int k = s[i][0];
        if(vis[k]) continue;
        for(j=i+1; j<=N; j++){
            auto o = lower_bound(s[j].begin(),s[j].end(),k);
            if(o==s[j].end()) break;
            if(vis[*o]) break;
            vis[*o] = 1; k = *o;
        }
        j = min(j,N);
        for(int l=i; l<=j; l++)
            f[l] = max(f[l],j);
    }
    memset(vis,0,sizeof(vis));
    for(int i=N,j; i; i--){
        if(t[i].size()==0) continue;
        int k = t[i][0];
        if(vis[k]) continue;
        for(j=i-1; j; j--){
            auto o = lower_bound(t[j].begin(),t[j].end(),k);
            if(o==t[j].end()) break;
            if(vis[*o]) break;
            vis[*o] = 1; k = *o;
        }
        j = max(j,1);
        for(int l=i; l>=j; l--)
            g[l] = min(g[l],j);
    }
    for(int i=1; i<=N; i++)
        tag[g[i]]++,tag[f[i]+1]--;
    for(int i=1,V=0; i<=N; i++){
        V += tag[i];
        printf("%d",V);
        if(i==N) printf("\n");
            else printf(" ");
    }
}