#include<bits/stdc++.h>
using namespace std;
const int N=1e5+5;
int n,m;
int x,y;
int R;
int key[N],siz[N],rk[N],son[N][2],lazy[N];
int cnt;
bool flag;
int newnode(int x){
rk[x]=rand();
key[x]=x;
siz[x]=1;
return x;
}
void pushdown(int rt){
if(lazy[rt]){
swap(son[rt][0],son[rt][1]);
lazy[son[rt][0]]^=1;
lazy[son[rt][1]]^=1;
lazy[rt]=0;
}
}
void pushup(int rt){
siz[rt]=siz[son[rt][0]]+siz[son[rt][1]]+1;
}
int merge(int rt1,int rt2){
if(!rt1){
return rt2;
}
if(!rt2){
return rt1;
}
if(key[rt1]<key[rt2]){
pushdown(rt1);
son[rt1][1]=merge(son[rt1][1],rt2);
pushup(rt1);
return rt1;
}
else{
pushdown(rt2);
son[rt2][0]=merge(rt1,son[rt2][0]);
pushup(rt2);
return rt2;
}
}
pair<int,int> split(int rt,int y){
pair<int,int> ans;
if(!rt){
return make_pair(0,0);
}
pushdown(rt);
if(siz[son[rt][0]]+1<=y){
ans=split(son[rt][1],y-(siz[son[rt][0]]+1));
son[rt][1]=ans.first;
ans.first=rt;
}
else{
ans=split(son[rt][0],y);
son[rt][0]=ans.second;
ans.second=rt;
}
pushup(rt);
return ans;
}
void swap_lr(int l,int r){
pair<int,int> tmp1=split(R,y);
pair<int,int> tmp2=split(tmp1.first,x-1);
lazy[tmp2.second]^=1;
R=merge(merge(tmp2.first,tmp2.second),tmp1.second);
}
void print(int rt){
if(!rt){
return;
}
pushdown(rt);
print(son[rt][0]);
printf("%d ",key[rt]);
print(son[rt][1]);
}
signed main(){
srand(time(0));
scanf("%d %d",&n,&m);
for(int i=1;i<=n;i++){
R=merge(R,newnode(i));
}
while(m--){
scanf("%d %d",&x,&y);
swap_lr(x,y);
}
print(R);
return 0;
}