#include <bits/stdc++.h>
#pragma GCC optimize("O3")
using namespace std;
using ll = long long;
template <class T>
using V = vector<T>;
const ll inf = (1e18);
const ll mod = 1000000007;
ll gcd(ll a, ll b) { return b ? gcd(b, a % b) : a; }
ll lcm(ll c, ll d) { return c / gcd(c, d) * d; }
struct __INIT {
  __INIT() {
    cin.tie(0);
    ios::sync_with_stdio(false);
    cout << fixed << setprecision(15);
  }
} __init;
template <class T>
bool chmax(T &a, const T &b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
bool chmin(T &a, const T &b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int main() {
  ll n, m;
  cin >> n >> m;
  V<char> s(n);
  s[0] = '1';
  for (int i = 1; i < n; i++) {
    s[i] = '0';
  }
  bool ok = true;
  V<bool> used(n, false);
  for (int i = 0; i < m; i++) {
    int a;
    char b;
    cin >> a >> b;
    a--;
    if ((used[a] && s[a] != b) || (a == 0 && b == '0')) ok = false;
    used[a] = true;
    s[a] = b;
  }
  if (ok) {
    for (int i = 0; i < n; i++) cout << s[i];
    cout << endl;
  } else
    cout << -1 << endl;
}
