#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
using namespace std;
#define N 100002
#define lowbit(i) (i&(-i))
typedef long long ll;
struct node
{
    int l,r,id;
}a[N],b[N];
int n,m,ans[N],ls[N*330],rs[N*330],mn[N*330],rt[N],js,sum;
inline bool cmp(node n1,node n2){return n1.r-n1.l>n2.r-n2.l;}
void chng(int &o,int ind,int l,int r,int x,int y)
{
    o=++js;ls[o]=ls[ind],rs[o]=rs[ind],mn[o]=min(mn[ind],y);
    if(l==r)return;int mid=(l+r)>>1;
    if(x<=mid)chng(ls[o],ls[ind],l,mid,x,y);
    else chng(rs[o],rs[ind],mid+1,r,x,y);
}
int ask(int ind,int l,int r,int al,int ar)
{if(!ind)return 1e9;if(al<=l&&r<=ar)return mn[ind];int mid=(l+r)>>1,ret=1e9;
    if(al<=mid)ret=min(ret,ask(ls[ind],l,mid,al,ar));
    if(ar>mid)ret=min(ret,ask(rs[ind],mid+1,r,al,ar));return ret;
}
inline void ada(node nd){for(int i=nd.r;i<=n;i+=lowbit(i))chng(rt[i],rt[i],1,n,nd.l,nd.id);}
inline int qry(int l,int r)
{int ret=1e9;for(int i=r;i;i-=lowbit(i))ret=min(ret,ask(rt[i],1,n,l,r));return ret;}
void solve(int l,int r)
{
    if(l>r)return;
    int pos=qry(l,r);if(pos>1e8)return;
    sum+=b[pos].r-b[pos].l+1;
    solve(l,b[pos].l-1);solve(b[pos].r+1,r);
}
int main()
{
    scanf("%d%d",&n,&m);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d",&a[i].l,&a[i].r);a[i].id=i;b[i]=a[i];
    }memset(mn,0x3f,sizeof(mn));
    sort(a+1,a+1+m,cmp);int t=1;
    for(int i=n;i;i--)
    {
        while(t<=m&&a[t].r-a[t].l+1>=i)
        {ada(a[t]);t++;}
        sum=0;solve(1,n);ans[i]=sum;
    }
    for(int i=1;i<=n;i++)printf("%d\n",ans[i]);
}