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 Lua (LuaJIT 2.1.0) (judge verdict: Wrong Answer)

local mmi, mma = math.min, math.max
local h, w = io.read("*n", "*n")
local a, b = {}, {}
for i = 1, h do
  a[i], b[i] = io.read("*n", "*n")
end
if a[1] == 1 and b[1] == w then
  for i = 1, h do
    print(-1)
  end
  os.exit()
end

local asked_by_depth = {}
for i = 1, h do
  asked_by_depth[i] = {}
end
local inf = 1000000007
local ret = {}
for i = 1, h + 1 do
  ret[i] = inf
end
local function solve(spos)
  local th = h
  local curpos = spos
  local t = {curpos}
  for i = 1, h do
    if curpos < a[i] or b[i] < curpos then
    else
      if b[i] == w then
        th = i - 1 break
      end
      curpos = b[i] + 1
    end
    t[i + 1] = curpos
  end
  -- print(th, table.concat(t, " "))
  for i = th, 1, -1 do
    if curpos < a[i] or b[i] < curpos then
    else
      curpos = a[i] - 1
    end
  end
  spos = curpos
  for i = 1, th do
    if curpos < a[i] or b[i] < curpos then
    else
      curpos = b[i] + 1
    end
    ret[i] = mmi(ret[i], i + curpos - spos)
  end
end

if 1 < a[1] then
  solve(1)
end
if b[1] < w then
  solve(b[1] + 1)
end
for i = 1, h do
  if ret[i] == inf then ret[i] = -1 end
end
ret[h + 1] = nil
print(table.concat(ret, "\n"))