#include<bits/stdc++.h>
#define tmpl(x) tree[x].l
#define tmpr(x) tree[x].r
#define size(x) tree[x].siz
using namespace std;
const int N=1e5+5;
int n,m,l,r,tot,root;
bool flag[N];
struct Tree{
int l,r,val,siz,next;
}tree[N];
inline void pushup(int node){
tree[node].siz=size(tmpl(node))+size(tmpr(node))+1;
}
inline void pushdown(int node){
flag[node]=false;
flag[tmpl(node)]^=1;
flag[tmpr(node)]^=1;
swap(tree[node].l,tree[node].r);
}
inline void split(int node,int val,int &x,int &y){
if(!node){
x=0;
y=0;
return;
}
if(flag[node])
pushdown(node);
if(size(tmpl(node))<val){
x=node;
split(tmpr(node),val-size(tmpl(node))-1,tmpr(node),y);
}
else{
y=node;
split(tmpl(node),val,x,tmpl(node));
}
pushup(node);
}
inline int merge(int x,int y){
if(!x||!y)
return x+y;
if(tree[x].next<=tree[y].next){
if(flag[x])
pushdown(x);
tree[x].r=merge(tmpr(x),y);
pushup(x);
return x;
}
if(flag[y])
pushdown(y);
tree[y].l=merge(x,tmpl(y));
pushup(y);
return y;
}
inline void write(int node){
if(!node)
return;
if(flag[node])
pushdown(node);
write(tmpl(node));
cout<<tree[node].val<<" ";
write(tmpr(node));
}
int main(){
srand(time(0));
cin>>n>>m;
for(int i=1;i<=n;i++){
tot++;
tree[tot].siz=1;
tree[tot].val=i;
tree[tot].next=rand()%1000000007;
root=merge(root,tot);
}
while(m--){
cin>>l>>r;
int x,y,z;
split(root,l-1,x,y);
split(y,r-l+1,y,z);
flag[y]^=1;
root=merge(merge(y,z),x);
}
write(root);
return 0;
}