#include <bits/stdc++.h>
using namespace std;
const int NMax = 1100000;
struct node {
  int w, id, sz;
  node *left, *right;
  int lsize() { return left ? left->sz : 0; }
  int rsize() { return right ? right->sz : 0; }
} * T, pool[NMax];
void update(node *p) {
  if (!p) return;
  p->sz = p->lsize() + p->rsize() + 1;
}
int L;
struct pnn {
  node *x, *y;
};
pnn mp(node *x, node *y) {
  pnn ret;
  ret.x = x;
  ret.y = y;
  return ret;
}
node *new_node(int id) {
  node *p = &pool[L++];
  p->w = rand() * rand();
  p->id = id;
  p->sz = 1;
  p->left = p->right = NULL;
  return p;
}
node *new_node(int id, int w) {
  node *p = &pool[L++];
  p->w = w;
  p->id = id;
  p->sz = 1;
  p->left = p->right = NULL;
  return p;
}
int N, M;
node *merge(node *a, node *b) {
  if (!a) return b;
  if (!b) return a;
  if (b->w > a->w) {
    a->right = merge(a->right, b);
    update(a);
    return a;
  } else {
    b->left = merge(a, b->left);
    update(b);
    return b;
  }
}
pnn split(node *a, int l) {
  if (!a) return mp((node *)NULL, (node *)NULL);
  if (l >= a->sz) return mp(a, (node *)NULL);
  if (l <= 0) return mp((node *)NULL, a);
  if (l <= a->lsize()) {
    pnn ret = split(a->left, l);
    a->left = ret.y;
    update(a);
    ret.y = a;
    return ret;
  } else {
    pnn ret = split(a->right, l - a->lsize() - 1);
    a->right = ret.x;
    update(a);
    ret.x = a;
    return ret;
  }
}
int have[NMax], chose[NMax], nn;
int oper[NMax];
void DFS(node *p) {
  if (p->left) DFS(p->left);
  if (p->id == -1) p->id = chose[nn++];
  if (p->right) DFS(p->right);
}
void DFS1(node *p) {
  if (p->left) DFS1(p->left);
  printf("%d ", p->id);
  if (p->right) DFS1(p->right);
}
node *Build(int x, int y, int w) {
  if (x == y) {
    node *p = new_node(-1, w);
    return p;
  }
  int mid = (x + y) >> 1;
  node *p = new_node(-1, w);
  if (mid > x) p->left = Build(x, mid - 1, w + rand());
  if (mid < y) p->right = Build(mid + 1, y, w + rand());
  update(p);
  return p;
}
int main() {
  scanf("%d%d", &N, &M);
  T = Build(1, N, -100000000);
  for (int i = 1; i <= M; i++) {
    int x, y;
    scanf("%d%d", &x, &y);
    swap(x, y);
    oper[i] = x;
    pnn tmp = split(T, x - 1);
    pnn tmq = split(tmp.y, 1);
    if (have[y] && tmq.x->id != y) {
      puts("-1");
      getchar();
      getchar();
      return 0;
    }
    have[y] = 1;
    if (tmq.x->id != -1 && tmq.x->id != y) {
      puts("-1");
      getchar();
      getchar();
      return 0;
    }
    tmq.x->id = y;
    tmp.x = merge(tmq.x, tmp.x);
    T = merge(tmp.x, tmq.y);
  }
  for (int i = 1; i <= N; i++)
    if (!have[i]) chose[nn++] = i;
  nn = 0;
  DFS(T);
  for (int i = M; i >= 1; i--) {
    pnn tmp = split(T, oper[i]);
    pnn tmq = split(tmp.x, 1);
    tmp.x = merge(tmq.y, tmq.x);
    T = merge(tmp.x, tmp.y);
  }
  DFS1(T);
  puts("");
  getchar();
  getchar();
  return 0;
}
