from collections import deque
n, k = map(int, input().split())
# q:双端队列,存储待处理的数字;cur:当前要加入队列的数字;res:最终结果列表
q, cur, res = deque(), 1, []
flag = True # 标记方向:True=正向(append+pop左),False=反向(append左+pop右)
for _ in range(k):
l, r = map(int, input().split())
if flag:
# 正向模式:
# 1. 将cur到r的数字依次追加到队列尾部
while cur <= r:
q.append(cur)
cur += 1
# 2. 队列长度超过(r-l+1)时,弹出队首元素到结果(保留最后r-l+1个元素在队列)
while len(q) > r - l + 1:
res.append(q.popleft())
else:
# 反向模式:
# 1. 将cur到r的数字依次添加到队列头部
while cur <= r:
q.appendleft(cur)
cur += 1
# 2. 队列长度超过(r-l+1)时,弹出队尾元素到结果
while len(q) > r - l + 1:
res.append(q.pop())
flag = not flag # 每次操作后翻转方向
# 处理剩余未加入队列的数字(cur到n)
while cur <= n:
if flag:
q.append(cur)
else:
q.appendleft(cur)
cur += 1
# 将队列中剩余数字按当前方向弹出到结果
while q:
res.append(q.popleft() if flag else q.pop())
# 输出最终结果
print(*res)