#include <bits/stdc++.h>
using namespace std;
typedef vector<pair<long long int, long long int>> vec_p;
const long long int MOD = pow(10, 9) + 7;
const long long int LLINF = pow(2, 61) - 1;
const int INF = pow(2, 30) - 1;
long long int gcd(long long int a, long long int b) {
  return b ? gcd(b, a % b) : a;
}
long long int beki(long long int A, long long int B) {
  long long int C = 1;
  if (B == 0) {
    return 1;
  } else {
    for (long long int i = 0; i < B; i++) {
      C *= A;
    }
    return C;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  long long int N, M;
  string S;
  cin >> N >> M;
  vector<long long int> s(M), c(M);
  for (long long int i = 0; i < (long long int)(M); i++) {
    cin >> s.at(i) >> c.at(i);
  }
  vec_p pairs(M);
  for (long long int i = 0; i < (long long int)(M); i++) {
    pairs.at(i) = make_pair(s.at(i), c.at(i));
  }
  sort(pairs.begin(), pairs.end());
  bool flag = true;
  for (long long int i = 0; i < (long long int)(M - 1); i++) {
    if (pairs.at(i).first == pairs.at(i + 1).first &&
        !(pairs.at(i).second == pairs.at(i + 1).second)) {
      flag = false;
      ;
      break;
    }
  }
  for (long long int i = 0; i < (long long int)(M); i++) {
    if (pairs.at(i).first > N) {
      flag = false;
      break;
    }
    if (pairs.at(i).first == 1 && pairs.at(i).second == 0 && !(N == 1)) {
      flag = false;
      break;
    }
  }
  if (flag) {
    long long int ans = 0;
    ans += pairs.at(0).second * beki(10, N - pairs.at(0).first);
    for (long long int i = 0; i < (long long int)(M - 1); i++) {
      if (!(pairs.at(i).first == pairs.at(i + 1).first)) {
        ans += pairs.at(i + 1).second * beki(10, N - pairs.at(i + 1).first);
      }
    }
    cout << ans << endl;
  } else {
    cout << -1 << endl;
  }
}
