#include <bits/stdc++.h>

using namespace std;

const int N = 1e5 + 10;
const int INF = 1e9 + 10;
struct Segment
{
    vector<int> mi, ls, rs;
    Segment() {}
    Segment(int n) : mi(n * 400, INF), ls(n * 400), rs(n * 400) {}
    int cnt = 0;
    void pushup(int pos)
    {
        mi[pos] = min(mi[ls[pos]], mi[rs[pos]]);
    }
    int query(int &pos, int ql, int qr, int l, int r)
    {
        if (!pos)
            return INF;
        if (ql <= l && r <= qr)
        {
            return mi[pos];
        }
        int mid = (l + r) >> 1;
        int res = INF;
        if (ql <= mid)
            res = min(res, query(ls[pos], ql, qr, l, mid));
        if (qr > mid)
            res = min(res, query(rs[pos], ql, qr, mid + 1, r));
        return res;
    }
    void update(int &pos, int v, int w, int l, int r)
    {
        if (!pos)
            pos = ++cnt;
        if (l == r)
        {
            mi[pos] = min(mi[pos], w);
            return;
        }
        int mid = (l + r) >> 1;
        if (v <= mid)
            update(ls[pos], v, w, l, mid);
        else
            update(rs[pos], v, w, mid + 1, r);
        pushup(pos);
    }
} t;

struct SegmentSegment
{
    vector<int> rt;
    Segment t;
    int n;
    SegmentSegment() {}
    SegmentSegment(int n_) : t(n_), rt(n_ * 40), n(n_) {}
    int query(int ql, int qr, int pos, int l, int r)
    {
        if (ql <= l && r <= qr)
        {
            return t.query(rt[pos], l, qr, 1, n);
        }
        int mid = (l + r) >> 1;
        int res = INF;
        if (ql <= mid)
            res = min(res, query(ql, qr, pos << 1, l, mid));
        if (qr > mid)
            res = min(res, query(ql, qr, pos << 1 | 1, mid + 1, r));
        return res;
    }
    void update(int ql, int qr, int id, int pos, int l, int r)
    {
        t.update(rt[pos], qr, id, 1, n);
        if (l == r)
        {
            return;
        }
        int mid = (l + r) >> 1;
        if (ql <= mid)
            update(ql, qr, id, pos << 1, l, mid);
        else
            update(ql, qr, id, pos << 1 | 1, mid + 1, r);
    }
};
void solve()
{
    int n, m;
    cin >> n >> m;
    vector<vector<array<int, 3>>> a(n + 1);
    vector<pair<int, int>> p(m);
    for (int i = 0; i < m; i++)
    {
        int l, r;
        cin >> l >> r;
        p[i] = {l, r};
        a[r - l + 1].push_back({i, l, r});
    }
    vector<int> ans(n + 1);
    SegmentSegment tt(n);
    function<int(int, int)> solve = [&](int l, int r) -> int
    {
        if (l > r)
            return 0;
        int id = tt.query(l, r, 1, 1, n);
        //cout << id << endl;

        if (id == INF)
            return 0;
        //cout << p[id].first << " " << p[id].second << endl;
        return p[id].second - p[id].first + 1 + solve(l, p[id].first - 1) + solve(p[id].second + 1, r);
    };
    for (int i = n; i >= 1; i--)
    {
        //cout << i << endl;
        for (auto [id, l, r] : a[i])
        {

            tt.update(l, r, id, 1, 1, n);
        }
        ans[i] = solve(1, n);
    }

    for (int i = 1; i <= n; i++)
        cout << ans[i] << endl;
}
int main()
{
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    int T = 1;
    while (T--)
    {
        solve();
    }
}