#include <bits/stdc++.h>
using namespace std;
using namespace std;
struct node;
node *empty;
struct node {
  node *ch[2], *p;
  int v;
  int sz;
  node() : p(this), v(0), sz(0) { ch[0] = ch[1] = this; }
  node(int v) : v(v), sz(1), p(empty) { ch[0] = ch[1] = empty; }
};
node *root;
inline void push_up(node *nd) { nd->sz = 1 + nd->ch[0]->sz + nd->ch[1]->sz; }
inline void setchild(node *p, node *c, int idx) {
  if (p != empty) {
    p->ch[idx] = c;
  }
  c->p = p;
}
inline int getdir(node *p, node *c) { return p->ch[1] == c; }
inline void rotate(node *nd, int idx) {
  node *ch = nd->ch[idx], *p = nd->p;
  setchild(nd, ch->ch[!idx], idx);
  setchild(ch, nd, !idx);
  setchild(p, ch, getdir(p, nd));
  push_up(nd);
  push_up(ch);
}
inline void splay(node *nd) {
  while (nd->p != empty) {
    node *p = nd->p, *g = p->p;
    int pi = getdir(p, nd), gi = getdir(g, p);
    if (g == empty) {
      rotate(p, pi);
    } else if (pi == gi) {
      rotate(g, gi);
      rotate(p, gi);
    } else {
      rotate(p, pi);
      rotate(g, gi);
    }
  }
  root = nd;
}
inline node *getNodeAt(node *t, int idx) {
  idx = min(idx, t->sz - 1);
  while (t->ch[0]->sz != idx) {
    if (t->ch[0]->sz < idx) {
      idx -= t->ch[0]->sz + 1;
      t = t->ch[1];
    } else {
      t = t->ch[0];
    }
  }
  splay(t);
  return t;
}
inline void split(node *t, int presz, node *&pre, node *&suf) {
  if (presz == 0) {
    pre = empty;
    suf = t;
  } else {
    pre = getNodeAt(t, presz - 1);
    suf = pre->ch[1];
    pre->ch[1] = suf->p = empty;
    push_up(pre);
  }
}
inline void merge(node *pre, node *suf, node *&t) {
  if (pre == empty) {
    t = suf;
  } else {
    t = getNodeAt(pre, pre->sz - 1);
    setchild(t, suf, 1);
    push_up(t);
  }
}
const int N = 1e6 + 6;
int ans[N];
bool vis[N];
int n, m;
void solve(int x, int y) {
  node *before, *mid, *after;
  split(root, y + 1, before, after);
  split(before, y, before, mid);
  if (!vis[x]) {
    if (mid->v >= 0) {
      cout << -1 << '\n';
      exit(0);
    }
    vis[x] = true;
    ans[abs(mid->v + 1)] = x;
    mid->v = x;
  } else {
    if (mid->v != x) {
      cout << -1 << '\n';
      exit(0);
    }
  }
  merge(mid, before, root);
  merge(root, after, root);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  empty = new node();
  cin >> n >> m;
  root = empty;
  for (int i = 0; i < int(n); i++) merge(root, new node(-i - 1), root);
  int x, y;
  memset(ans, -1, sizeof ans);
  for (int i = 0; i < int(m); i++) {
    cin >> x >> y;
    solve(x - 1, y - 1);
  }
  vector<int> v;
  for (int i = 0; i < int(n); i++)
    if (!vis[i]) v.push_back(i);
  reverse(v.begin(), v.end());
  for (int i = 0; i < int(n); i++) {
    if (ans[i] == -1) {
      ans[i] = v.back();
      v.pop_back();
    }
  }
  for (int i = 0; i < int(n); i++) cout << ans[i] + 1 << " ";
  cout << '\n';
  return 0;
}
