#include <bits/stdc++.h>
using namespace std;
#define pb push_back
#define pf push_front
#define mp make_pair
#define fi first
#define se second
#define int long long
#define all(x) (x).begin(), (x).end()
typedef long double ld;
typedef long long ll;
typedef pair<ll,ll> pll;
typedef pair<int,int> pii;
typedef vector<int> vi;
typedef vector<ll> vll;
typedef vector<bool> vb;
typedef vector<vector<int>> vvi;
typedef vector<vector<bool>> vvb;
typedef vector<vector<ll>> vvll;
typedef vector<string> vs;
typedef vector<vector<string>> vvs;
typedef vector<char> vc;
typedef vector<vector<char>> vvc;
typedef map<int, int> mii;
typedef unordered_map<int, int> umii;
const int mod = 1e9 + 7;
const int inf = (int)4e18;
const bool tc = false;
struct seg {
int l, r, i;
bool operator<(const seg &other) const {
if (r != other.r) return r < other.r;
else if (l != other.l) return l < other.l;
else return i < other.i;
}
};
int n, k;
vector<seg> a, b, og;
int up[500005][21];
vi suf;
vi coords;
struct SparseSeg {
struct Node {
int lch = 0, rch = 0;
int sum = 0;
int mx = 0;
int lazy = 0;
};
vector<Node> st;
SparseSeg() {
st.resize(2);
}
int new_node() {
st.pb(Node());
return (int)st.size() - 1;
}
void push(int p) {
if (!st[p].lch) st[p].lch = new_node();
if (!st[p].rch) st[p].rch = new_node();
if (st[p].lazy == 0) return;
int v = st[p].lazy;
for (int ch : {st[p].lch, st[p].rch}) {
st[ch].sum += v;
st[ch].mx += v;
st[ch].lazy += v;
}
st[p].lazy = 0;
}
void pull(int p) {
int L = st[p].lch, R = st[p].rch;
st[p].mx = max(L ? st[L].mx : 0, R ? st[R].mx : 0);
}
void upd(int p, int l, int r, int ql, int qr, int v) {
if (ql > r || qr < l || ql > qr) return;
if (ql <= l && r <= qr) {
st[p].sum += v;
st[p].mx += v;
st[p].lazy += v;
return;
}
push(p);
int m = (l + r) >> 1;
if (ql <= m) upd(st[p].lch, l, m, ql, qr, v);
if (qr > m) upd(st[p].rch, m + 1, r, ql, qr, v);
pull(p);
}
int qry(int p, int l, int r, int ql, int qr) {
if (!p || ql > r || qr < l || ql > qr) return 0;
if (ql <= l && r <= qr) return st[p].mx;
push(p);
int m = (l + r) >> 1;
return max(qry(st[p].lch, l, m, ql, qr),
qry(st[p].rch, m + 1, r, ql, qr));
}
};
int get_idx(int x) {
return lower_bound(all(coords), x) - coords.begin();
}
int ans(int l, int r) {
int pos = lower_bound(all(b), seg{l, -inf, -inf},
[](const seg &A, const seg &B) {
if (A.l != B.l) return A.l < B.l;
if (A.r != B.r) return A.r < B.r;
return A.i < B.i;
}) - b.begin();
if (pos == n) return 0;
int s = b[suf[pos]].i;
if (og[s].r > r) return 0;
int ret = 1;
for (int j = 20; j >= 0; j--) {
int nxt = up[s][j];
if (nxt >= n) continue;
if (og[nxt].r <= r) {
s = nxt;
ret += (1LL << j);
}
}
return ret;
}
inline void solve() {
cin >> n >> k;
a.resize(n);
b.resize(n);
og.resize(n);
coords.clear();
for (int i = 0; i < n; i++) {
cin >> a[i].l >> a[i].r;
a[i].i = i;
b[i].i = i;
b[i].l = a[i].r;
b[i].r = a[i].l;
og[i] = a[i];
coords.pb(a[i].l);
coords.pb(a[i].r);
}
sort(all(a));
sort(all(b));
for (auto &x : b) swap(x.l, x.r);
sort(all(coords));
coords.erase(unique(all(coords)), coords.end());
suf.assign(n, 0);
suf[n - 1] = n - 1;
for (int i = n - 2; i >= 0; i--) {
if (b[i].r <= b[suf[i + 1]].r) suf[i] = i;
else suf[i] = suf[i + 1];
}
for (int i = 0; i < n; i++) {
int pos = lower_bound(all(b), seg{og[i].r, -inf, -inf},
[](const seg &A, const seg &B) {
if (A.l != B.l) return A.l < B.l;
if (A.r != B.r) return A.r < B.r;
return A.i < B.i;
}) - b.begin();
if (pos == n) up[i][0] = n;
else up[i][0] = b[suf[pos]].i;
}
for (int j = 0; j <= 20; j++) up[n][j] = n;
for (int j = 1; j <= 20; j++) {
for (int i = 0; i < n; i++) {
up[i][j] = up[up[i][j - 1]][j - 1];
}
}
int cur = ans(0, inf);
if (cur < k) {
cout << -1 << '\n';
return;
}
SparseSeg st;
set<int> Ls, Rs;
Ls.insert(inf);
Rs.insert(0);
vi ret;
for (int i = 0; i < n; i++) {
int l = og[i].l;
int r = og[i].r;
int li = get_idx(l);
int ri = get_idx(r);
if (li + 1 <= ri - 1) {
if (st.qry(1, 0, (int)coords.size() - 1, li + 1, ri - 1) != 0) {
continue;
}
}
auto itR = Rs.lower_bound(l);
int gl = *prev(itR);
auto itL = Ls.lower_bound(r);
int gr = *itL;
int nxt = cur - ans(gl, gr) + ans(gl, l) + 1 + ans(r, gr);
if (nxt >= k) {
cur = nxt;
ret.pb(i + 1);
Ls.insert(l);
Rs.insert(r);
if (li + 1 <= ri - 1) {
st.upd(1, 0, (int)coords.size() - 1, li, ri, 1);
}
if ((int)ret.size() == k) break;
}
}
if ((int)ret.size() < k) {
cout << -1 << '\n';
return;
}
for (int x : ret) cout << x << '\n';
}
void setIO(string s) {
freopen((s + ".in").c_str(), "r", stdin);
freopen((s + ".out").c_str(), "w", stdout);
}
signed main() {
ios::sync_with_stdio(false);
cout.tie(0);
cin.tie(0);
int t = 1;
if (tc) cin >> t;
while (t--) solve();
}