Problem:
Score : 600 points

Problem Statement

There is a grid of squares with H+1 horizontal rows and W vertical columns.

You will start at one of the squares in the top row and repeat moving one square right or down. However, for each integer i from 1 through H, you cannot move down from the A_i-th, (A_i + 1)-th, \ldots, B_i-th squares from the left in the i-th row from the top.

For each integer k from 1 through H, find the minimum number of moves needed to reach one of the squares in the (k+1)-th row from the top. (The starting square can be chosen individually for each case.) If, starting from any square in the top row, none of the squares in the (k+1)-th row can be reached, print -1 instead.

Constraints

1 \leq H,W \leq 2\times 10^5

1 \leq A_i \leq B_i \leq W

Input

Input is given from Standard Input in the following format:

H W
A_1 B_1
A_2 B_2
:
A_H B_H

Output

Print H lines. The i-th line should contain the answer for the case k=i.

Sample Input 1

4 4
2 4
1 1
2 3
2 4

Sample Output 1

1
3
6
-1

Let (i,j) denote the square at the i-th row from the top and j-th column from the left.

For k=1, we need one move such as (1,1) → (2,1).

For k=2, we need three moves such as (1,1) → (2,1) → (2,2) → (3,2).

For k=3, we need six moves such as (1,1) → (2,1) → (2,2) → (3,2) → (3,3) → (3,4) → (4,4).

For k=4, it is impossible to reach any square in the fifth row from the top.

Solution in PyPy3 (7.3.0) (judge verdict: Time Limit Exceeded)

# coding: utf-8
import sys
#from operator import itemgetter
sysread = sys.stdin.buffer.readline
read = sys.stdin.buffer.read
#from heapq import heappop, heappush
from collections import defaultdict
sys.setrecursionlimit(10**7)
#import math
#from itertools import product, accumulate, combinations, product
#import bisect
#import numpy as np
#from copy import deepcopy
from collections import deque
#from decimal import Decimal
#from numba import jit

INF = 1 << 50
EPS = 1e-8
mod = 10 ** 9 + 7

H, W, *AB = map(int, read().split())
AB_list = [(-1,-1)]
for i in range(H):
    a, b = AB[2*i], AB[2*i+1]
    AB_list.append((a,b))

min_list = [INF] * (H+3)
MAP = defaultdict(lambda : INF)

def bfs():
    queue = deque([])
    for j in range(1, W+1):
        queue.append((1, j, 0))

    while queue:
        ci, cj, count = queue.popleft()
        if MAP[(ci, cj)] < count:
            continue
        min_list[ci] = min(min_list[ci], count)

        if ci == H+1:break
        a, b = AB_list[ci]

        if a <= cj <= b:
            if b + 1 <= W:
                ni = ci + 1
                nj = b + 1
                nc = count + b - cj + 2
                if MAP[(ni, nj)] > nc:
                    MAP[(ni, nj)] = nc
                    queue.append((ni, nj, nc))

        elif ci + 1 <= H+1:
            ni = ci + 1
            nj = cj
            nc = count + 1
            if MAP[(ni, nj)] > nc:
                MAP[(ni, nj)] = nc
                queue.append((ni, nj, nc))


def run():
    bfs()

    for v in min_list[2:-1]:
        if v == INF:
            print(-1)
        else:
            print(v)

    #for m in MAP:
    #    print(m)




if __name__ == "__main__":
    run()