#include <bits/stdc++.h>   using namespace std;   template <class T>   void chmax(T &a, T b) {     if (a < b) a = b;   }   template <class T>   void chmin(T &a, T b) {     if (a > b) a = b;   }   constexpr long long INF = 1000000000000000000;   constexpr long long mod = 1000000007;   constexpr long double eps = 1e-8;   const long double pi = acos(-1);   long long dx[] = {0, 1, 0, -1}, dy[] = {1, 0, -1, 0};   long long Random(long long mi, long long ma) {     random_device rnd;     mt19937 mt(rnd());     uniform_int_distribution<long long> engine(mi, ma);     return engine(mt);   }   long long gcd(long long a, long long b) {     if (b == 0) return a;     return gcd(b, a % b);   }   long long lcm(long long a, long long b) { return a / gcd(a, b) * b; }   bool prime(long long a) {     if (a == 1) return false;     for (long long i = 2; i * i <= a; i++) {       if (a % i == 0) return false;     }     return true;   }   long long modpow(long long a, long long b) {     if (b == 0) return 1;     if (b % 2) return modpow(a, b - 1) * a % mod;     long long memo = modpow(a, b / 2);     return memo * memo % mod;   }   vector<long long> kaijo, invkaijo;   void init_fact(long long n) {     kaijo.resize(n + 1);     invkaijo.resize(n + 1);     kaijo[0] = 1;     for (long long i = 1; i <= n; i++) {       kaijo[i] = kaijo[i - 1] * i;       kaijo[i] %= mod;     }     for (long long i = 0; i < n + 1; i++) invkaijo[i] = modpow(kaijo[i], mod - 2);   }   long long comb(long long a, long long b) {     if (a < b) return 0;     if (a < 0 || b < 0) return 0;     return kaijo[a] * modpow(kaijo[a - b], mod - 2) % mod *            modpow(kaijo[b], mod - 2) % mod;   }   long long inv(long long x) {     x = modpow(x, mod - 2);     return x;   }   struct BIT {     long long n, beki = 1;     vector<long long> bit;     BIT(long long x) {       bit.resize(x + 1, 0);       n = x;       while (beki * 2 <= n) beki *= 2;     }     long long sum(long long i) {       long long res = 0;       while (i > 0) {         res += bit[i];         i -= i & -i;       }       return res;     }     void add(long long i, long long x) {       while (i <= n) {         bit[i] += x;         i += i & -i;       }     }     long long lowerbound(long long w) {       if (w <= 0) return 0;       long long x = 0;       for (long long k = beki; k > 0; k >>= 1) {         if (x + k <= n && bit[x + k] < w) {           w -= bit[x + k];           x += k;         }       }       return x + 1;     }   };   signed main() {     cin.tie(0);     ios::sync_with_stdio(false);     long long n, k;     cin >> n >> k;     vector<pair<long long, long long> > v[200010];     BIT bit(200001);     for (long long i = 0; i < n; i++) {       long long l, r;       cin >> l >> r;       bit.add(l, 1);       bit.add(r + 1, -1);       v[l].push_back({r, i + 1});     }     priority_queue<pair<long long, long long> > q;     vector<long long> ans;     for (long long i = 1; i <= 200000; i++) {       for (pair<long long, long long> j : v[i]) q.push(j);       while (bit.sum(i) > k) {         bit.add(i, -1);         bit.add(q.top().first + 1, 1);         ans.push_back(q.top().second);         q.pop();       }     }     cout << ans.size() << endl;     for (long long i : ans) cout << i <<    ;     cout << endl;     return 0;   }