#include<map>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<vector>
#include<iostream>
#include<algorithm>
using namespace std;

typedef pair<int,int> pii;
#define pb push_back
#define mp make_pair

const int maxn=50000+10;
const int maxm=100000+10;
map<int,int> t[maxn];
int n,m;
int res[maxn];
int p[maxm][2];
vector<int> rk[maxn];

void add2(map<int,int> &t, int k, int v)
{
    auto it=t.lower_bound(k);
    if (it!=t.end() && it->second<=v) return;
    if (t.size()==0 || (it==t.begin() && it->first>k))
    {
        t.insert(mp(k,v));
        return;
    }
    if (it==t.end() || it->first>k) it--;
    while (it->second>=v)
    {
        if (it==t.begin())
        {
            t.erase(it);
            break;
        }
        int u=it->first;
        it--;
        t.erase(u);
    }
    t.insert(mp(k,v));
}  

void add(int x, int y,int l,int r, int idx)
{
    for (int i=r;i<=n;i+=i&(-i))
        add2(t[i], l, idx);
}

int getres2(map<int,int> &t, int k)
{
    auto it=t.lower_bound(k);
    if (it==t.end()) return m+1;
    return it->second;
}

int getres(int x,int y, int len)
{
    if (y-x+1<len) return 0;
    int idx=m+1;
    for (int i=y;i;i-=i&(-i))
        idx=min(idx, getres2(t[i], x));
    if (idx==m+1) return 0;
    return getres(x, p[idx][0]-1, len)+getres(p[idx][1]+1,y,len)+p[idx][1]-p[idx][0]+1;
}
    

int main()
{
    scanf("%d%d",&n,&m);
    for (int i=0;i<m;i++)
    {
        scanf("%d%d",&p[i][0], &p[i][1]);
        rk[p[i][1]-p[i][0]+1].pb(i);
    }
    for (int i=n;i;i--)
    {
        for (int j: rk[i])
            add(1,n,p[j][0],p[j][1], j);
        res[i]=getres(1,n,i);
    }
    for (int i=1;i<=n;i++) printf("%d\n", res[i]);
    return 0;
}

