#include <bits/stdc++.h>
using namespace std;
template <class T>
inline T bigmod(T p, T e, T M) {
  long long ret = 1;
  for (; e > 0; e >>= 1) {
    if (e & 1) ret = (ret * p) % M;
    p = (p * p) % M;
  }
  return (T)ret;
}
template <class T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <class T>
inline T modinverse(T a, T M) {
  return bigmod(a, M - 2, M);
}
long long seg[400001];
void insert(int idx, int s, int e, int p) {
  if (s == e) {
    seg[idx] = 1;
    return;
  }
  int mid = (s + e) / 2;
  if (p <= mid)
    insert(idx * 2 + 1, s, mid, p);
  else
    insert(idx * 2 + 2, mid + 1, e, p);
  seg[idx] = seg[idx * 2 + 1] + seg[idx * 2 + 2];
}
int query(int idx, int s, int e, int st, int ed) {
  if (seg[idx] == e - s + 1) return -1;
  if (s == e) return s;
  int mid = (s + e) / 2;
  if (ed <= mid)
    return query(idx * 2 + 1, s, mid, st, ed);
  else if (st > mid)
    return query(idx * 2 + 2, mid + 1, e, st, ed);
  else {
    int ret = query(idx * 2 + 2, mid + 1, e, mid + 1, ed);
    if (ret != -1) return ret;
    return query(idx * 2 + 1, s, mid, st, mid);
  }
}
pair<pair<long long, long long>, int> pp[100001];
vector<int> vc;
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  long long a, b = 0, c, d = 0, e = 0, f = 0, g, h = 0, x, y, z = 0;
  cin >> a >> b;
  for (int i = (1); i < (b + 1); ++i) {
    cin >> pp[i].first.second >> pp[i].first.first;
    pp[i].second = i;
  }
  sort(pp + 1, pp + b + 1);
  for (int i = (1); i < (b + 1); ++i) {
    c = query(0, 1, a, a - pp[i].first.first + 1, pp[i].first.second);
    if (c != -1) {
      vc.push_back(pp[i].second);
      insert(0, 1, a, c);
    }
  }
  cout << vc.size() << endl;
  for (int i = (0); i < (vc.size()); ++i) cout << vc[i] << " ";
  cout << endl;
}
