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)