Problem: 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.

Example

Input

4 4
2 4
1 1
2 3
2 4


Output

1
3
6
-1

Solution (in CPP):

Solution:
#include <bits/stdc++.h>
using namespace std;
#define ff first
#define ss second
#define MP make_pair
#define PB push_back
#define ll long long
#define int long long
#define f(i,x,n) for(int i=x;i<n;i++)
#define ld long double
const int mod = 1000000007;
const int INF = 1e18;
int ans[1000005];
int a[200005], b[200005];

set <pair <int, int> > se;
int32_t main() {

	ios_base::sync_with_stdio(false);	cin.tie(NULL);

	int n, m, pos = 0;
	cin >> n >> m;

	ans[m + 1]++;

	f(i, 1, m + 1) {
		se.insert({i, 0});
		ans[0]++;
	}

	f(i, 1, n + 1) {
		cin >> a[i] >> b[i];

		if (pos > m) {
			cout << "-1\n";
			continue;
		}
		if (b[i] != m) {
			auto itr = se.lower_bound({b[i] + 2, 0});

			if (itr != se.begin()) {
				itr--;
				if ((*itr).ff != b[i] + 1) {
					int value = b[i] + 1 - (*itr).ff + (*itr).ss;
					se.insert({b[i] + 1, value});
					ans[value]++;
				}
			}
		}

		auto itr = se.lower_bound({a[i], 0});
		while (itr != se.end() && (*itr).ff <= b[i] ) {
			auto itrtmp = itr;
			itr++;
			ans[itrtmp->ss]--;
			se.erase(itrtmp);
		}

		while (ans[pos] <= 0) {
			pos++;
		}

		if (pos > m)
			cout << "-1\n";
		else
			cout << pos + i << '\n';
	}

	return 0;
}