#include <bits/stdc++.h>
const int MAX_N = 1 << 21;
int n, m, bit[MAX_N + 1], pos[MAX_N + 1], ind[MAX_N + 1], ans[MAX_N + 1];
std::set<int> set;
void update(int p, int v) {
  while (p <= MAX_N) {
    bit[p] += v;
    p += p & -p;
  }
}
int query(int p) {
  int res = 0;
  while (p) {
    res += bit[p];
    p -= p & -p;
  }
  return res;
}
int find(int v) {
  int res = 0;
  for (int step = MAX_N; step; step >>= 1)
    if (res + step <= MAX_N && bit[res + step] <= v) v -= bit[res += step];
  return res;
}
int main() {
  memset(pos, 0xff, sizeof(pos));
  memset(ind, 0xff, sizeof(ind));
  scanf("%d%d", &n, &m);
  for (int i = 1; i <= n; ++i) set.insert(i);
  for (int i = 0; i < n; ++i) update(MAX_N - i, 1);
  for (int i = 0; i < m; ++i) {
    int x, y;
    scanf("%d%d", &x, &y);
    int p = find(y);
    if ((p <= MAX_N - n || (!ans[p - MAX_N + n] && set.count(x))) &&
        (ind[p] == -1 || ind[p] == x)) {
      if (p > MAX_N - n) {
        ans[p - MAX_N + n] = x;
        set.erase(x);
      }
      ind[MAX_N - n - i] = ind[p] = x;
      update(p + 1, -1);
      update(MAX_N - n - i, 1);
    } else {
      printf("-1\n");
      return 0;
    }
  }
  for (int i = 1; i <= n; ++i)
    if (ans[i])
      printf("%d ", ans[i]);
    else {
      printf("%d ", *set.begin());
      set.erase(set.begin());
    }
  printf("\n");
  return 0;
}
