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

local inf = 1000000007
local ret = {}
for i = 1, h do
  ret[i] = inf
end
local task_l, task_r, task_len, task_d = {}, {}, {}, {}
local function addtask(left, right, curlen, deg)
  ret[deg] = mmi(ret[deg], curlen)
  table.insert(task_l, left)
  table.insert(task_r, right)
  table.insert(task_len, curlen)
  table.insert(task_d, deg)
end
local function addtask_start(left, right, curlen, deg)
  table.insert(task_l, left)
  table.insert(task_r, right)
  table.insert(task_len, curlen)
  table.insert(task_d, deg)
end

local function solve(left, right, curlen, deg)
  deg = deg + 1
  if h < deg then return end
  curlen = curlen + 1
  if a[deg] <= left and right <= b[deg] then
    if b[deg] == w then return end
    curlen = curlen + b[deg] + 1 - right
    addtask(b[deg] + 1, b[deg] + 1, curlen, deg)
  elseif right < a[deg] or b[deg] < left then
    addtask(left, right, curlen, deg)
  else
    if b[deg] < right then
      addtask(b[deg] + 1, right, curlen, deg)
    elseif b[deg] < w then
      curlen = curlen + b[deg] + 1 - right
      addtask(b[deg] + 1, b[deg] + 1, curlen, deg)
    end
    if left < a[deg] then
      addtask(left, a[deg] - 1, curlen, deg)
    end
  end
end
addtask_start(1, w, 0, 0)
while 0 < #task_l do
  local left = task_l[#task_l]
  table.remove(task_l)
  local right = task_r[#task_r]
  table.remove(task_r)
  local curlen = task_len[#task_len]
  table.remove(task_len)
  local deg = task_d[#task_d]
  table.remove(task_d)
  solve(left, right, curlen, deg)
end
for i = 1, h do
  if ret[i] == inf then ret[i] = -1 end
end
print(table.concat(ret, "\n"))