#include <bits/stdc++.h>
using namespace std;
struct Node {
  int l, r, id;
} node[300001];
vector<int> ve[300001];
int vis[300001];
vector<int> ans;
bool cmp(Node x, Node y) { return x.l < y.l; }
priority_queue<Node> q;
bool operator<(Node x, Node y) { return x.r < y.r; }
int main() {
  int n, k;
  scanf("%d%d", &n, &k);
  for (int i = 1; i <= n; i++) {
    scanf("%d%d", &node[i].l, &node[i].r);
    node[i].id = i;
  }
  sort(node + 1, node + n + 1, cmp);
  int Max = 0, Min = 1e9;
  for (int i = 1; i <= n; i++) {
    ve[node[i].l].push_back(i);
    vis[node[i].l]++;
    vis[node[i].r + 1]--;
    Max = max(Max, node[i].r);
    Min = min(Min, node[i].l);
  }
  int temp = 0;
  for (int i = Min; i <= Max; i++) {
    temp += vis[i];
    for (int j = 0; j < ve[i].size(); j++) {
      int y = ve[i][j];
      q.push(node[y]);
    }
    while (temp > k) {
      ans.push_back(q.top().id);
      vis[q.top().l]--;
      vis[q.top().r + 1]++;
      temp--;
      q.pop();
    }
  }
  printf("%d\n", ans.size());
  for (int i = 0; i < ans.size(); i++) printf("%d ", ans[i]);
  printf("\n");
}
