#include <bits/stdc++.h>
using namespace std;
const int INF = 1e9 + 7;
const long long INFL = 9 * 1e18;
template <typename T>
void print(T&& x) {
  cout << x << endl;
}
long long inline digit(long long num) {
  int tmp = 0;
  while (num) {
    tmp++;
    num /= 10;
  }
  return tmp;
}
template <typename T>
inline T digitSum(T num) {
  T sum = 0;
  while (num) {
    sum += num % 10;
    num /= 10;
  }
  return sum;
}
template <typename T>
inline T gcd(T a, T b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
template <typename T>
inline T lcm(T a, T b) {
  T g = gcd(a, b);
  return a / g * b;
}
template <typename T>
inline T power(T a, T b) {
  T tmp = 1;
  for (int i = 0; i < ((int)(b)); ++i) {
    tmp *= a;
  }
  return tmp;
}
template <class T>
inline bool chmax(T& a, T b) {
  if (a < b) {
    a = b;
    return 1;
  }
  return 0;
}
template <class T>
inline bool chmin(T& a, T b) {
  if (a > b) {
    a = b;
    return 1;
  }
  return 0;
}
int ctoi(char c) { return c - '0'; }
int main() {
  int n, m;
  cin >> n >> m;
  vector<pair<int, int>> a(m);
  for (int i = 0; i < ((int)(m)); ++i) cin >> a[i].first >> a[i].second;
  sort((a).begin(), (a).end());
  bool ok = true;
  string s(n, '0');
  for (int i = 0; i < ((int)(m)); ++i) {
    if (n != 1 && a[i].first == 1 && a[i].second == 0) ok = false;
    if (i != m - 1 && a[i].first == a[i + 1].first &&
        a[i].second != a[i + 1].second)
      ok = false;
    s[a[i].first - 1] = a[i].second + '0';
  }
  if (ok)
    print(s);
  else
    print(-1);
  return 0;
}
