#include <bits/stdc++.h>
using namespace std;
long long int mi(long long int n, long long int m) {
  long long int pw = n % m;
  long long int ex = m - 2;
  long long int ans = 1;
  while (ex) {
    if (ex & 1) ans = ans * pw % m;
    pw = pw * pw % m;
    ex >>= 1;
  }
  return ans % 1000000007;
}
long long int pw(long long int a, long long int n) {
  long long int pw = a % 1000000007;
  long long int ex = n;
  long long int ans = 1;
  while (ex) {
    if (ex & 1) ans = ans * pw % 1000000007;
    pw = pw * pw % 1000000007;
    ex >>= 1;
  }
  return ans % 1000000007;
}
template <typename T>
istream &operator>>(istream &is, vector<T> &v) {
  for (T &t : v) is >> t;
  return is;
}
template <typename T>
ostream &operator<<(ostream &os, const vector<T> &v) {
  for (const T &t : v) {
    os << t << " ";
  }
  os << '\n';
  return os;
}
void show(long long int x) { cout << x << " "; }
long long int gcd(long long int a, long long int b) {
  return b == 0 ? a : gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return a / gcd(a, b) * b;
}
long long int max(long long int a, long long int b) { return a > b ? a : b; }
long long int min(long long int a, long long int b) { return a < b ? a : b; }
long long int Abs(long long int x) { return x > 0 ? x : (-x); }
long long int Ceil(long long int a, long long int b) {
  return a / b + (a % b != 0);
}
void solve() {
  int n, m;
  cin >> n >> m;
  string s = string(n, '#');
  bool ok = true;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    a--;
    if (s[a] != '#' && (s[a] - '0') != b) {
      ok = false;
    } else {
      s[a] = b + '0';
    }
  }
  for (int i = 0; i < n; i++) {
    if (s[i] == '#') s[i] = '0';
  }
  if (!ok || s[0] == '0')
    cout << "-1"
         << "\n";
  else
    cout << s << "\n";
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  int t = 1;
  while (t--) {
    solve();
  }
}
