struct Nd {
    int val, pri, sz;
    bool rev;
    Nd *l, * r;
    Nd(int _v = 0, int _p = 0): val(_v), pri(_p), sz(1), rev(0), l(0), r(0) {}
};

int getsz(Nd* t) {
        return t ? t->sz : 0;
    }
    void pull(Nd* t) {
        if (!t) return;
        t->sz = 1 + getsz(t->l) + getsz(t->r);
    }
    void rev(Nd* t) {
        if (!t) return;
        t->rev ^= 1;
        swap(t->l, t->r);
    }
    void push(Nd* t) {
        if (!t or !t->rev) return;
        if (t->l) rev(t->l);
        if (t->r) rev(t->r);
        t->rev = 0;
    }
    void split(Nd* t, int k, Nd* &l, Nd* &r){
        if(!t){ l = r = nullptr; return; }
        push(t);
        if(getsz(t->l) >= k){
            split(t->l, k, l, t->l);
            r = t;
            pull(r);
        } else {
            split(t->r, k - getsz(t->l) - 1, t->r, r);
            l = t;
            pull(l);
        }
    }
    Nd* merge(Nd* a, Nd* b){
        if(!a) return b;
        if(!b) return a;
        if(a->pri > b->pri){
            push(a);
            a->r = merge(a->r, b);
            pull(a);
            return a;
        } else {
            push(b);
            b->l = merge(a, b->l);
            pull(b);
            return b;
        }
    }

    void inord(Nd* t, vector<int>& out){
        if(!t) return;
        push(t);
        if(t->l) inord(t->l, out);
        out.push_back(t->val);
        if(t->r) inord(t->r, out);
    }

void solve() {
    int n, k; 
    rd(n, k);
    mt19937 rng((unsigned)chrono::steady_clock::now().time_since_epoch().count());
    uniform_int_distribution<int> uid(INT_MIN, INT_MAX);
    Nd* rt = 0;
    rep(i, 1, n) {
        Nd* nd = new Nd(i, uid(rng));
        rt = merge(rt, nd);
    }
    rep(i, 0, k - 1) {
        int l, r; rd(l, r);
        Nd *a, *b, *c;
        split(rt, l - 1, a, b);
        split(b, r - l + 1, b, c);
        if (b) rev(b);
        rt = merge(merge(a, b), c);
    }
    vector<int> ans;
    inord(rt, ans);
    println(ans);
}