#include <bits/stdc++.h>
using namespace std;
const int P = 1e9 + 7, INF = 0x3f3f3f3f;
long long gcd(long long a, long long b) { return b ? gcd(b, a % b) : a; }
long long qpow(long long a, long long n) {
  long long r = 1 % P;
  for (a %= P; n; a = a * a % P, n >>= 1)
    if (n & 1) r = r * a % P;
  return r;
}
long long inv(long long first) {
  return first <= 1 ? 1 : inv(P % first) * (P - P / first) % P;
}
const int N = 3e6 + 10;
int n, m, tot, rt;
struct {
  int cnt, sz, fa, ch[2], v;
} tr[N];
int val[N], vis[N], ans[N];
void pu(int first) {
  tr[first].sz =
      tr[tr[first].ch[0]].sz + tr[tr[first].ch[1]].sz + tr[first].cnt;
}
void rot(int first) {
  int second = tr[first].fa, z = tr[second].fa;
  int f = tr[second].ch[1] == first;
  tr[z].ch[tr[z].ch[1] == second] = first, tr[first].fa = z;
  tr[second].ch[f] = tr[first].ch[f ^ 1], tr[tr[first].ch[f ^ 1]].fa = second;
  tr[first].ch[f ^ 1] = second, tr[second].fa = first, pu(second);
}
void splay(int first, int s = 0) {
  for (int second; second = tr[first].fa, second != s; rot(first))
    if (tr[second].fa != s) {
      rot((tr[second].ch[0] == first) == (tr[tr[second].fa].ch[0] == second)
              ? second
              : first);
    }
  if (!s) rt = first;
}
void get(int first) {
  int cur = rt;
  while (first != tr[cur].v && tr[cur].ch[first > tr[cur].v])
    cur = tr[cur].ch[first > tr[cur].v];
  splay(cur);
}
void insert(int first) {
  int cur = rt, p = 0;
  while (cur && first != tr[cur].v)
    p = cur, cur = tr[cur].ch[first > tr[cur].v];
  if (cur)
    ++tr[cur].cnt;
  else {
    cur = ++tot;
    if (p) tr[p].ch[first > tr[p].v] = cur, tr[cur].fa = p;
    tr[cur].v = first, tr[cur].sz = tr[cur].cnt = 1;
  }
  splay(cur);
}
int pre(int first) {
  get(first);
  if (tr[rt].v <= first) return rt;
  int cur = tr[rt].ch[0];
  while (tr[cur].ch[1]) cur = tr[cur].ch[1];
  return cur;
}
int nxt(int first) {
  get(first);
  if (tr[rt].v >= first) return rt;
  int cur = tr[rt].ch[1];
  while (tr[cur].ch[0]) cur = tr[cur].ch[0];
  return cur;
}
void erase(int first) {
  int s1 = pre(first - 1), s2 = nxt(first + 1);
  splay(s1), splay(s2, s1);
  int &cur = tr[s2].ch[0];
  if (tr[cur].cnt > 1)
    --tr[cur].cnt, splay(cur);
  else
    cur = 0;
}
int find(int first, int k) {
  int s = tr[tr[first].ch[0]].sz;
  if (k <= s) return find(tr[first].ch[0], k);
  if (k > s + tr[first].cnt)
    return find(tr[first].ch[1], k - s - tr[first].cnt);
  return first;
}
int main() {
  scanf("%d%d", &n, &m);
  insert(INF), insert(-INF);
  for (int i = m + 1; i <= n + m; ++i) insert(i);
  for (int i = 1; i <= m; ++i) {
    int first, second;
    scanf("%d%d", &first, &second);
    int t = tr[find(rt, second + 1)].v;
    erase(t);
    if (!val[t]) {
      if (vis[first]) return puts("-1"), 0;
      vis[first] = 1, ans[t - m] = first;
    } else if (val[t] != first)
      return puts("-1"), 0;
    val[m - i] = first, insert(m - i);
  }
  int now = 1;
  for (int i = 1; i <= n; ++i) {
    if (!ans[i]) {
      while (vis[now]) ++now;
      ans[i] = now++;
    }
    printf("%d ", ans[i]);
  }
  putchar(10);
}
