#include<bits/stdc++.h>
using namespace std;
int n , m;
struct node{
int s[2] , p , v;
int siz , tag;
void init(int _v , int _p)
{
v = _v;
p = _p;
siz = 1;
}
}tr[100005];
int root , idx;
void pushup(int p)
{
tr[p].siz = tr[tr[p].s[0]].siz + tr[tr[p].s[1]].siz + 1;
}
void pushdown(int p)
{
if(tr[p].tag)
{
swap(tr[p].s[0] , tr[p].s[1]);
tr[tr[p].s[0]].tag ^= 1;
tr[tr[p].s[1]].tag ^= 1;
tr[p].tag = 0;
}
}
void rotate(int x)
{
int y = tr[x].p;
int z = tr[y].p;
int k = (tr[y].s[1] == x);
tr[z].s[tr[z].s[1] == y] = x,tr[x].p = z;
tr[y].s[k] = tr[x].s[k ^ 1] , tr[tr[x].s[k ^ 1]].p = y;
tr[x].s[k ^ 1] = y , tr[y].p = x;
pushup(y); pushup(x);
}
void splay(int x , int k)
{
while(tr[x].p != k)
{
int y = tr[x].p;
int z = tr[y].p;
if(z != k)
{
if((tr[z].s[1] == y) ^ (tr[y].s[1] == x))rotate(x);
else rotate(y);
}
rotate(x);
}
if(!k)root = x;
}
void insert(int v)
{
int u = root , p = 0;
while(u)p = u , u = tr[u].s[v > tr[u].v];
u = ++idx;
if(p)tr[p].s[v > tr[p].v] = u;
tr[u].init(v , p);
splay(u , 0);
}
int get_k(int v)
{
int u = root;
while(1)
{
pushdown(u);
if(tr[tr[u].s[0]].siz >= v)u = tr[u].s[0];
if(tr[tr[u].s[0]].siz + 1 == v)return u;
if(tr[tr[u].s[0]].siz + 1 < v)v -= tr[tr[u].s[0]].siz + 1 , u = tr[u].s[1];
}
return -1;
}
void output(int p)
{
pushdown(p);
if(tr[p].s[0])output(tr[p].s[0]);
if(tr[p].v >0 && tr[p].v <= n)cout << tr[p].v << ' ';
if(tr[p].s[1])output(tr[p].s[1]);
}
int main()
{
cin >> n >> m;
for(int i = 0;i <= n + 1;i++)insert(i);
while(m--)
{
int l , r;
cin >> l >> r;
int x = get_k(l) , y = get_k(r + 2);
splay(x , 0) , splay(y , x);
tr[tr[y].s[0]].tag ^= 1;
}
output(root);
return 0;
}