#include <bits/stdc++.h>
using namespace std;
FILE* _fin = stdin;
FILE* _fout = stdout;
char readc() {
  char var;
  fscanf(_fin, "%c", &var);
  return var;
}
int readi() {
  int var;
  fscanf(_fin, "%d", &var);
  return var;
}
long long readll() {
  long long var;
  fscanf(_fin, "%lld", &var);
  return var;
}
void repread(int* data, int n) {
  for (int i = 0; i < n; ++i) data[i] = readi();
}
void repread(long long* data, int n) {
  for (int i = 0; i < n; ++i) data[i] = readll();
}
int reads(char* str, int maxsize) {
  for (;;) {
    if (fgets(str, maxsize, _fin) == NULL) break;
    if (str[0] != '\n' && str[0] != '\r') break;
  }
  int slen = strlen(str);
  if (slen == 0) return 0;
  if (str[slen - 1] == '\n' || str[slen - 1] == '\r') str[--slen] = 0;
  return slen;
}
long long gcd(long long a, long long b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
void reversei(int* data, int n) {
  int k = n >> 1;
  for (int i = 0; i < k; ++i) {
    int tmp = data[i];
    data[i] = data[n - i - 1];
    data[n - i - 1] = tmp;
  }
}
int bsearch(int val, int* data, int n) {
  if (data[0] > val) return -1;
  if (data[n - 1] < val) return n;
  int l = 0;
  int r = n - 1;
  for (; l < r;) {
    int mid = (l + r + 1) >> 1;
    if (data[mid] <= val)
      l = mid;
    else
      r = mid - 1;
  }
  if (data[r] != val) ++r;
  return r;
}
struct Veci {
  int* data;
  int size;
  int n;
};
void init(Veci* t, int size) {
  t->data = (int*)malloc(sizeof(int) * size);
  t->size = size;
  t->n = 0;
}
void resize(Veci* t) {
  int ns = t->size * 1.2f;
  t->data = (int*)realloc(t->data, sizeof(int) * ns);
  t->size = ns;
}
void add(Veci* t, int val) {
  if (t->n >= t->size) resize(t);
  int k = t->n;
  t->data[k] = val;
  t->n = k + 1;
}
void free(Veci* t) { free(t->data); }
struct Vecll {
  long long* data;
  int size;
  int n;
};
void init(Vecll* t, int size) {
  t->data = (long long*)malloc(sizeof(long long) * size);
  t->size = size;
  t->n = 0;
}
void resize(Vecll* t) {
  int ns = t->size * 1.2f;
  t->data = (long long*)realloc(t->data, sizeof(long long) * ns);
  t->size = ns;
}
void add(Vecll* t, long long val) {
  if (t->n >= t->size) resize(t);
  int k = t->n;
  t->data[k] = val;
  t->n = k + 1;
}
void free(Vecll* t) { free(t->data); }
struct Vecs {
  char** data;
  int size;
  int n;
};
void init(Vecs* t, int size) {
  t->data = (char**)malloc(sizeof(char*) * size);
  t->size = size;
  t->n = 0;
}
void resize(Vecs* t) {
  int ns = t->size * 1.2f;
  t->data = (char**)realloc(t->data, sizeof(char*) * ns);
  t->size = ns;
}
void add(Vecs* t, char* val) {
  if (t->n >= t->size) resize(t);
  int k = t->n;
  t->data[k] = val;
  t->n = k + 1;
}
void free(Vecs* t) { free(t->data); }
int ispali(int* a, int* b, int n) {
  for (int i = 0; i < n; ++i) {
    if (a[i] != b[n - i - 1]) {
      return 0;
    }
  }
  return 1;
}
int ispalc(char* a, char* b, int n) {
  for (int i = 0; i < n; ++i) {
    if (a[i] != b[n - i - 1]) {
      return 0;
    }
  }
  return 1;
}
struct Pairi {
  int x, y;
};
int cmp_Pairi(const void* _a, const void* _b) {
  Pairi* a = (Pairi*)_a;
  Pairi* b = (Pairi*)_b;
  if (a->x == b->x) {
    if (a->y < b->y)
      return -1;
    else
      return 1;
  }
  if (a->x < b->x)
    return -1;
  else
    return 1;
}
void sort_Pairi(Pairi* d, int n) { qsort(d, n, sizeof(Pairi), cmp_Pairi); }
int cmp_Str(const void* _a, const void* _b) {
  char* a = *((char**)_a);
  char* b = *((char**)_b);
  return strcmp(a, b);
}
void sort_Str(char** str, int n) { qsort(str, n, sizeof(char*), cmp_Str); }
int main() {
  {
    _fin = fopen("dataabc157A.txt", "r");
    if (_fin == NULL) _fin = stdin;
  };
  int n = readi();
  int m = readi();
  int s[3] = {-1, -1, -1};
  for (int i = 0; i < m; ++i) {
    int digit = readi();
    int value = readi();
    digit--;
    if (s[digit] != -1 && s[digit] != value) {
      fprintf(_fout, "%d\n", -1);
      return 0;
    }
    s[digit] = value;
  }
  if (s[0] == 0) {
    fprintf(_fout, "%d\n", -1);
    return 0;
  }
  if (s[0] == -1) s[0] = 1;
  for (int i = 1; i < n; ++i)
    if (s[i] == -1) s[i] = 0;
  for (int i = 0; i < n; ++i) fprintf(_fout, "%d", s[i]);
  fprintf(_fout, "\n");
  return 0;
}
