#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
const long long INF = 1e17;
const int maxn = 1e6;
const int mod = 10007;
const double eps = 1e-9;
const double PI = acos(-1);
inline bool read(long long &num) {
  char in;
  bool IsN = false;
  in = getchar();
  if (in == EOF) return false;
  while (in != '-' && (in < '0' || in > '9')) in = getchar();
  if (in == '-') {
    IsN = true;
    num = 0;
  } else
    num = in - '0';
  while (in = getchar(), in >= '0' && in <= '9') {
    num *= 10, num += in - '0';
  }
  if (IsN) num = -num;
  return true;
}
long long n, m, p;
long long sum[maxn];
vector<int> res, ans;
long long minl, maxl;
struct node {
  int l, r, id;
  bool friend operator<(node a, node b) { return a.r < b.r; }
} qr[maxn];
struct Node {
  int l, r, id;
  bool friend operator<(Node a, Node b) { return a.l > b.l; }
};
void update(int pos, int w) {
  while (pos <= maxl) {
    sum[pos] += w;
    pos += pos & -pos;
  }
}
long long GetSum(int pos) {
  long long ans = 0;
  while (pos > 0) {
    ans += sum[pos];
    pos -= pos & -pos;
  }
  return ans;
}
vector<node> v[maxn];
vector<Node> g[maxn];
int main() {
  minl = INF, maxl = -INF;
  read(n);
  read(m);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &qr[i].l, &qr[i].r);
    minl = min(minl, (long long)qr[i].l);
    maxl = max(maxl, (long long)qr[i].r);
    qr[i].id = i;
    v[qr[i].l].push_back(qr[i]);
    g[qr[i].r].push_back(Node{qr[i].l, qr[i].r, qr[i].id});
    update(qr[i].l, 1);
    update(qr[i].r + 1, -1);
  }
  priority_queue<node> q;
  priority_queue<Node> q1;
  for (int i = minl; i <= maxl; i++) {
    for (node x : v[i]) q.push(x);
    long long temp = GetSum(i);
    while (temp > m) {
      node u = q.top();
      q.pop();
      res.push_back(u.id);
      update(u.l, -1);
      update(u.r + 1, 1);
      temp--;
    }
  }
  for (int i = minl; i <= maxl; i++) sum[i] = 0;
  for (int i = 1; i <= n; i++) {
    update(qr[i].l, 1);
    update(qr[i].r + 1, -1);
  }
  for (int i = maxl; i >= minl; i--) {
    for (Node x : g[i]) q1.push(x);
    long long temp = GetSum(i);
    while (temp > m) {
      Node u = q1.top();
      q1.pop();
      ans.push_back(u.id);
      update(u.l, -1);
      update(u.r + 1, 1);
      temp--;
    }
  }
  if (res.size() < ans.size()) {
    printf("%d\n", res.size());
    for (int x : res) {
      printf("%d ", x);
    }
  } else {
    printf("%d\n", ans.size());
    for (int x : ans) {
      printf("%d ", x);
    }
  }
  return 0;
}
