def solve(D, Q, Qs): taskrange = [] result = [] for q in Qs: t = [int(ql) for ql in q.split(" ")] merged = False while(True): merging = False for i, task in enumerate(taskrange): if t == task: continue if task[0] <= t[1] <= task[1] + 1 or task[0] <= t[0] <= task[1] + 1 or \ t[0] <= task[1] <= t[1] + 1 or t[0] <= task[0] <= t[1] + 1: taskrange[i] = [min(task[0], t[0]), max(task[1], t[1])] t = task merging = True merged = True if not merging: break if not merged: taskrange.append(t) result.append(max([t[1] - t[0] + 1for t in taskrange])) return result if __name__ == "__main__": D, Q = tuple([int(c) for c in input().split(" ")]) print("\n".join([str(a) for a in solve(D, Q, [input() for _ in range(0, Q)])]))