#include <bits/stdc++.h>
using namespace std;
const long long mod = 1e9 + 7;
unsigned long long base = 131;
const int w = 2e5 + 5;
int n, m, k;
struct node {
  int x, y, z, t;
} s[w];
struct node2 {
  int x, y;
  bool friend operator<(node2 x, node2 y) { return x.x < y.x; }
};
int cmp(node x, node y) { return x.x < y.x; }
priority_queue<node2> qu;
int a[w];
int cmp3(node x, node y) { return x.t < y.t; }
int main() {
  int i, t, j;
  cin >> n >> m;
  int max1 = 0, min1 = 1e6;
  int r = 0;
  long long num = 0;
  for (i = 1; i <= n; i++) {
    scanf("%d %d", &s[i].x, &s[i].y);
    s[i].z = 1;
    s[i].t = i;
    a[s[i].x]++, a[s[i].y + 1]--;
    max1 = max(max1, s[i].y);
    min1 = min(min1, s[i].x);
  }
  sort(s + 1, s + 1 + n, cmp);
  j = 1;
  for (i = min1; i <= max1; i++) {
    a[i] += a[i - 1];
    while (!qu.empty() && qu.top().x < i) qu.pop();
    while (j <= n && s[j].y >= i && s[j].x <= i) qu.push({s[j].y, j}), j++;
    if (a[i] > m) {
      while (a[i] > m) {
        node2 A = qu.top();
        qu.pop();
        a[i]--, a[A.x + 1]++;
        s[A.y].z = 0;
        num++;
      }
    }
  }
  cout << num << endl;
  sort(s + 1, s + 1 + n, cmp3);
  for (i = 1; i <= n; i++)
    if (s[i].z == 0) printf("%d%c", s[i].t, i == n ? '\n' : ' ');
  return 0;
}
