#include <bits/stdc++.h>
using namespace std;
const int INF = 1001001001;
const int MOD = 1e9 + 7;
const int dx[] = {-1, 0, 1, 0};
const int dy[] = {0, 1, 0, -1};
template <class T>
inline bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T &a, const T &b) {
  if (b < a) {
    a = b;
    return 1;
  }
  return 0;
}
int main() {
  cin.tie(0), ios::sync_with_stdio(false);
  int n, m;
  cin >> n >> m;
  vector<set<int>> num(n);
  for (int i = 0; i < int(m); i++) {
    int s, c;
    cin >> s >> c;
    num[--s].insert(c);
  }
  for (int i = 0; i < int(n); i++) {
    if (num[i].empty()) {
      if (!i)
        num[i].insert(1);
      else
        num[i].insert(0);
    } else if (2 <= num[i].size()) {
      cout << -1;
      return 0;
    }
  }
  if (n == 1) {
    for (int i = 0; i < 10; i++) {
      if (*num[0].begin() == i) {
        cout << i;
        return 0;
      }
    }
  } else if (n == 2) {
    for (int i = 10; i < 100; i++) {
      bool ok = true;
      if (*num[0].begin() != i / 10) ok = false;
      if (*num[1].begin() != i % 10) ok = false;
      if (ok) {
        cout << i;
        return 0;
      }
    }
  } else if (n == 3) {
    for (int i = 100; i < 1000; i++) {
      bool ok = true;
      if (*num[0].begin() != i / 100) ok = false;
      if (*num[1].begin() != i / 10 % 10) ok = false;
      if (*num[2].begin() != i % 10) ok = false;
      if (ok) {
        cout << i;
        return 0;
      }
    }
  }
  cout << -1;
  return 0;
}
