#include <bits/stdc++.h>
using namespace std;
using ull = unsigned long long;
using ll = long long;
using prll = pair<ll, ll>;
static const ll MOD = 1000000007;
static const ll mINF = -922337200085470000;
static const ll pINF = 1LL << 60;
static const ull uINF = 1844674407399900000;
static const double pi = 3.1415926535897932384;
static const ll juu = 100000;
static const ll hyaku = 1000000;
static const ll dx[4] = {0, 0, 1, -1};
static const ll dy[4] = {1, -1, 0, 0};
ll factor[300];
ll memory[300];
void primefac(ll num) {
  int i = 0, kosuu = 0;
  while (*(factor + i) != 0) {
    while (num % *(factor + i) == 0) {
      num /= *(factor + i);
      memory[*(factor + i)] += 1;
    }
    if (num == 1) break;
    i++;
  }
}
int elast(ll number) {
  ll tmp = 0;
  int flag = 0;
  *factor = 2;
  for (int i = 3; i <= number; i++) {
    flag = 0;
    for (int j = 0; j <= tmp; j++) {
      if (i % (*(factor + j)) == 0) {
        flag = 1;
        break;
      }
    }
    if (flag) continue;
    tmp += 1;
    *(factor + tmp) = i;
  }
  return tmp + 2;
}
ll powpow(ll n, ll p) {
  if (p == 1) return n % MOD;
  if (p % 2 == 1) {
    return (n * powpow(n, p - 1)) % MOD;
  }
  ll dob = powpow(n, p / 2);
  return (dob * dob) % MOD;
}
ll nCrMod(ll n, ll r) {
  ll child = 1;
  ll parent = 1;
  if (r == 0) return 1;
  for (ll i = 0; i < r; ++i) {
    child = child * (n - i) % MOD;
    parent = parent * (r - i) % MOD;
  }
  ll ans = child * powpow(parent, MOD - 2);
  return ans % MOD;
}
ll nCr(ll n, ll r) {
  ll val = 1;
  ll i;
  if (r == 0) return 1;
  for (i = 0; i < r; ++i) {
    val *= (n - i);
    val /= (r - i);
  }
  return val;
}
ll nPr(ll n, ll r) {
  ll val = 1;
  ll i;
  for (i = 0; i < r; ++i) {
    val *= (n - i);
  }
  return val;
}
template <typename T>
bool chmin(T &a, const T b) {
  if (a > b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
bool chmax(T &a, const T b) {
  if (a < b) {
    a = b;
    return true;
  }
  return false;
}
template <typename T>
void eraseSame(T &a) {
  sort(a.begin(), a.end());
  a.erase(unique(a.begin(), a.end()), a.end());
}
template <typename T>
bool swapmax(T &a, T &b) {
  T temp;
  temp = a;
  if (a > b) {
    a = b;
    b = temp;
    return false;
  }
  return true;
}
ll gcd(ll x, ll y) { return (x % y) ? gcd(y, x % y) : y; }
ll lcm(ll x, ll y) { return x / gcd(x, y) * y; }
template <typename T>
void splitIn(ll N, vector<T> &array) {
  T temp;
  int i = 0;
  if (N == 0) {
    return;
  }
  array.resize(N);
  while (cin >> temp) {
    array[i] = temp;
    i++;
    if (i >= N) {
      break;
    }
  }
  return;
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  ll n, k, m, l;
  ll ans = 0;
  ll sum = 0;
  vector<ll> v;
  cin >> n >> m;
  string s(n, '0');
  for (ll i = 0; i < (ll)(m); i++) {
    cin >> k >> l;
    if (s[k - 1] != '0') {
      if (s[k - 1] != to_string(l)[0]) {
        cout << "-1";
        return 0;
      }
    } else {
      s[k - 1] = to_string(l)[0];
    }
  }
  bool f = true;
  for (ll i = 0; i < (ll)(n); i++) {
    if (s[i] != '0') f = false;
    if (f) {
      cout << -1;
      return 0;
    }
  }
  cout << s << "\n";
  return 0;
}
