#include <bits/stdc++.h>
#define sz(v) (int)v.size()
#define debug(var) cout << #var << ": " << var << endl;
using namespace std;
using ll = long long;
using pii = pair<int, int>;

const int INF = 1e9 + 7;

struct node_t {
    ll lo, hi, add_tag = 0, add_tag2 = 0, min_val = 0, min_val2 = 0;

    void add(ll tag) {
        add_tag += tag;
        min_val += tag;
    }

    void add2(ll tag) {
        add_tag2 += tag;
        min_val2 += tag;
    }

    void pushdown(node_t &lhs, node_t &rhs) {
        if (add_tag == 0 && add_tag2 == 0)
            return;
        lhs.add(add_tag);
        rhs.add(add_tag);
        add_tag = 0;
        lhs.add2(add_tag2);
        rhs.add2(add_tag2);
        add_tag2 = 0;
    }

    void maintain(node_t &lhs, node_t &rhs) {
        min_val = min(lhs.min_val, rhs.min_val);
        min_val2 = min(lhs.min_val2, rhs.min_val2);
    }
};

struct seg_t {
    std::vector<node_t> seg;
    seg_t(int n) : seg(n + n) {
        int k = 1;
        while (k < n)
            k = k + k;
        int m = n + n - k, s = k - n;
        for (int i = 0; i < m; i++)
            seg[i + k] = {i, i + 1, 0, 0, 0, 0};
        for (int i = m; i < n; i++)
            seg[i + s] = {i, i + 1, 0, 0, 0, 0};
        for (int i = n - 1; i; i--)
            seg[i] = {seg[i + i].lo, seg[i + i + 1].hi, 0, 0, 0, 0};
    }

    template <class Fun> void run(int l, int r, Fun &&fun, int i = 1) {
        if (r <= seg[i].lo || seg[i].hi <= l)
            return;
        if (l <= seg[i].lo && seg[i].hi <= r)
            return fun(seg[i]);
        seg[i].pushdown(seg[i + i], seg[i + i + 1]);
        run(l, r, fun, i + i + 0);
        run(l, r, fun, i + i + 1);
        seg[i].maintain(seg[i + i], seg[i + i + 1]);
    }

    ll query_min(int l, int r) {
        node_t res;
        res.min_val = (ll)INF * INF;
        run(l, r, [&](node_t &node) { res.maintain(res, node); });
        return res.min_val;
    }

    ll query_min2(int l, int r) {
        node_t res;
        res.min_val2 = (ll)INF * INF;
        run(l, r, [&](node_t &node) { res.maintain(res, node); });
        return res.min_val2;
    }

    void add(int l, int r, ll val) {
        run(l, r, [&](node_t &node) { node.add(val), node.add2(val); });
    }

    void add2(int l, int r, ll val) {
        run(l, r, [&](node_t &node) { node.add2(val); });
    }

    void modify(int i, ll val) {
        run(i, i + 1, [&](node_t &node) {
            ll delta = val - query_min(i, i + 1);
            node.add(delta); 
            node.add2(delta); 
        });
    }

    node_t &top() { return seg[1]; }
};

int main() {
    int h, w;
    cin >> h >> w;

    seg_t seg(w + 1);
    for (int i = 1; i <= w; i++) {
        seg.add2(i, i + 1, -i);
    }
    // for (int i = 1; i <= w; i++) {
    //     cout << seg.query_min2(i, i + 1) << endl;
    // }
    // cout << endl;
    for (int i = 0; i < h; i++) {
        int a, b; cin >> a >> b;

        seg.modify(b + 1, seg.query_min2(1, b + 2) + b + 1 + 1);
        seg.add(1, a, 1);
        seg.add(a, b + 1, 2 * INF);
        seg.add(b + 2, w + 1, 1);

        // for (int i = 1; i <= w; i++)
        //     cout << seg.query_min(i, i + 1) << " ";
        // cout << endl;

        ll ans = seg.query_min(1, w + 1);
        cout << (ans >= INF ? -1 : ans) << endl; 
    }
}

Measured memory_bytes: 21984