//#pragma GCC optimize("O3")
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pii pair<int,int>
#define f first
#define s second
#define all(x) x.begin(),x.end()
#define _ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
int dx[4]={0,0,1,-1};
int dy[4]={1,-1,0,0};
void setIO(string s) {
    freopen((s + ".in").c_str(), "r", stdin);
    freopen((s + ".out").c_str(), "w", stdout);
}
const int inf=1e9+5;
int main(){_
    int n,k;
    cin>>n>>k;
    vector<pair<pair<int,int>,int>> vec(n+2);
    vector<int> L(n+2),R(n+2);
    for(int i=0;i<n;i++){
        cin>>L[i]>>R[i];
        vec[i].f={L[i],R[i]};
        vec[i].s=i;
    }
    vec[n]={{0,0},n};
    vec[n+1]={{inf,inf},n+1};
    L[n+1]=inf;
    R[n+1]=inf;
    vector<vector<int>> f(n+2,vector<int>(20));
    set<pair<int,int>> S;
    sort(all(vec));
    f[n+1][0]=n+1;
    S.insert({inf,n+1});
    for(int i=n;i>=0;i--){
        int id=vec[i].s;
        {
            auto it=S.lower_bound({vec[i].f.s,0});
            f[id][0]=(*it).s;
        }
        {
            S.insert({vec[i].f.f,id});
            auto it=S.find({vec[i].f.f,id});
            while(it!=S.begin() and R[(*prev(it)).s]>=R[id]){
                S.erase(prev(it));
                it=S.find({vec[i].f.f,id});
            }
        }
    }
    for(int j=1;j<20;j++){
        for(int i=0;i<=n+1;i++){
            f[i][j]=f[f[i][j-1]][j-1];
        }
    }
    S.clear();
    S.insert({0,n});
    S.insert({inf,n+1});
    auto get=[&](int i,int j){
        int ans=0;
        int x=i;
        for(int k=19;k>=0;k--){
            if(R[f[x][k]]<L[j]){
                ans+=(1<<k);
                x=f[x][k];
            }
        }
        if(R[f[x][0]]<=L[j]) return ans+1;
        else return ans;
    };
    auto banana=[&](int i,int j){
        if(L[i]>L[j]) swap(i,j);
        return (R[i]>L[j]);
    };
    vector<int> ans;
    int cur=get(n,n+1);
    for(int i=0;i<n;i++){
        auto it=S.lower_bound({L[i],0});
        if(banana((*it).s,i) or banana((*prev(it)).s,i)) continue;
        int cur2=cur-get((*prev(it)).s,(*it).s);
        cur2+=get((*prev(it)).s,i);
        cur2+=get(i,(*it).s);
        cur2++;
        //cout<<i+1<<' '<<cur2<<'\n';
        if(cur2<k) continue;
        cur=cur2;
        ans.push_back(i);
        S.insert({L[i],i});
    }
    if((int)ans.size()<k){
        cout<<-1<<'\n';
    }
    else{
        for(int i=0;i<k;i++){
            cout<<ans[i]+1<<'\n';
        }
    }
    return 0;
}
//maybe its multiset not set
//yeeorz
//diaoborz
Compilation message (stderr)
event2.cpp: In function 'void setIO(std::string)':
event2.cpp:15:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   15 |     freopen((s + ".in").c_str(), "r", stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
event2.cpp:16:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   16 |     freopen((s + ".out").c_str(), "w", stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... | 
| # | Verdict | Execution time | Memory | Grader output | 
|---|
| Fetching results... |