#include <iostream>
using namespace std;
struct Treap{
struct node{
int rev,v,sz,r,lc,rc;
};
node pool[100005];
int root;
void pushup(int o){
pool[o].sz = pool[pool[o].lc].sz + pool[pool[o].rc].sz + 1;
}
void pushrev(int o){
swap(pool[o].lc,pool[o].rc);
pool[o].rev ^= 1;
}
void pushdown(int o){
if(pool[o].rev) pushrev(pool[o].lc),pushrev(pool[o].rc);
pool[o].rev = 0;
}
pair<int,int> splitrnk(int o,int k){
if(!o) return {0,0};
pushdown(o);
int s = pool[pool[o].lc].sz + 1;
if(k < s){
auto v = splitrnk(pool[o].lc,k);
pool[o].lc = v.second;
pushup(o);
return {v.first,o};
}
auto v = splitrnk(pool[o].rc,k-s);
pool[o].rc = v.first;
pushup(o);
return {o,v.second};
}
int merge(int a,int b){
if(!a || !b) return a + b;
if(pool[a].r < pool[b].r){
pushdown(a);
pool[a].rc = merge(pool[a].rc,b);
pushup(a);
return a;
}
pushdown(b);
pool[b].lc = merge(a,pool[b].lc);
pushup(b);
return b;
}
int build(int l,int r,int d){
if(l > r) return 0;
int mid = l + r >> 1;
pool[mid].v = mid;
pool[mid].rev = false;
pool[mid].lc = build(l,mid-1,d+1);
pool[mid].rc = build(mid+1,r,d+1);
pushup(mid);
return mid;
}
void printtree(int o){
if(!o) return;
pushdown(o);
printtree(pool[o].lc);
cout << pool[o].v << " ";
printtree(pool[o].rc);
}
};
Treap t;
int main(){
freopen("P3391_4.in","r",stdin);
freopen("a.out","w",stdout);
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
int n,m;
cin >> n >> m;
t.root = t.build(1,n,1);
while(m--){
int l,r;
cin >> l >> r;
auto v = t.splitrnk(t.root,r);
auto w = t.splitrnk(v.first,l-1);
t.pushrev(w.second);
t.root = t.merge(t.merge(w.first,w.second),v.second);
}
t.printtree(t.root);
return 0;
}