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.



Sample input:
4 4
2 4
1 1
2 3
2 4


Sample output:
1
3
6
-1

Submission status: Wrong Answer

Solution code:
# compiled by pythran
"""
#pythran export main2()
import numpy as np
i4 = np.int32
i8 = np.int64


def solve(a, b, H, W):
    ret = np.empty(H, i8)
    for i in range(H):
        ret[i] = -1
    dp0 = np.arange(W)
    dp = np.arange(W)
    return ret


def main(in_file):
    stdin = open(in_file)
    H, W = [int(x) for x in stdin.readline().split()]
    a = np.empty(H, i8)
    b = np.empty(H, i8)
    for i in range(H):
        a[i], b[i] = [int(x) for x in stdin.readline().split()]
    a -= 1
    ans = solve(a, b, H, W)
    p = '\n'.join([str(x) for x in ans])
    print(p)


def main2():
    main('/dev/stdin')
"""
import os, sys
p = os.path.dirname(__file__)
pymain = os.path.join(p, "a.out")
if len(sys.argv) == 1:
    import subprocess
    if p == "":
        pymain = "./" + pymain
    subprocess.call(pymain)
else:
    import gzip, base64, stat
    gz = b'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'
    bin = gzip.decompress(base64.b64decode(gz))
    with open(pymain, "wb") as f:
        f.write(bin)
    os.chmod(pymain, 0o775)