#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;
}
set<pair<int,int>> chosen;
chosen.insert({0, 0});
chosen.insert({inf, inf});
vector<int> ret;
cur = ans(0, inf);
for (int i = 0; i < n; i++) {
int l = og[i].l, r = og[i].r;
auto it = chosen.lower_bound({l, -inf});
bool bad = false;
int gl = 0, gr = inf;
if (it != chosen.begin()) {
auto pr = prev(it);
gl = pr->second;
if (pr->second > l) bad = true;
}
if (it != chosen.end()) {
gr = it->first;
if (it->first < r) bad = true;
}
if (bad) continue;
int nxt = cur - ans(gl, gr) + ans(gl, l) + 1 + ans(r, gr);
if (nxt >= k) {
cur = nxt;
ret.push_back(i + 1);
chosen.insert({l, r});
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();
}