#include <bits/stdc++.h>
inline bool EQ(double a, double b) { return fabs(a - b) < 1e-9; }
const int INF = 1 << 29;
inline int two(int n) { return 1 << n; }
inline int test(int n, int b) { return (n >> b) & 1; }
inline void set_bit(int &n, int b) { n |= two(b); }
inline void unset_bit(int &n, int b) { n &= ~two(b); }
inline int last_bit(int n) { return n & (-n); }
inline int ones(int n) {
  int res = 0;
  while (n && ++res) n -= n & (-n);
  return res;
}
template <class T>
void chmax(T &a, const T &b) {
  a = max(a, b);
}
template <class T>
void chmin(T &a, const T &b) {
  a = min(a, b);
}
long long int gcd(long long int a, long long int b) {
  if (b == 0) return a;
  return gcd(b, a % b);
}
long long int lcm(long long int a, long long int b) {
  return (a * b) / gcd(a, b);
}
long long int max(long long int a, long long int b) {
  if (a > b) return a;
  return b;
}
long long int power(long long int x, long long int y) {
  long long int res = 1;
  while (y > 0) {
    if (y & 1) res = res * x;
    y = y >> 1;
    x = x * x;
  }
  return res;
}
long long int powermod(long long int x, long long int y) {
  long long int res = 1;
  x = x % 1000000007;
  while (y > 0) {
    if (y & 1) res = (res * x) % 1000000007;
    y = y >> 1;
    x = (x * x) % 1000000007;
  }
  return res;
}
long long mulmod(long long a, long long b) {
  long long res = 0;
  a %= 1000000007;
  while (b) {
    if (b & 1) res = (res + a) % 1000000007;
    a = (2 * a) % 1000000007;
    b >>= 1;
  }
  return res;
}
bool isPrime(long long int n) {
  if (n <= 1) return false;
  if (n <= 3) return true;
  if (n % 2 == 0 || n % 3 == 0) return false;
  for (int i = 5; i * i <= n; i += 6) {
    if ((n % i == 0) || (n % (i + 2) == 0)) return false;
  }
  return true;
}
long double dist(long long int x1, long long int y1, long long int x2,
                 long long int y2) {
  return (long double)sqrt(
      (long double)((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2)));
}
long long int squaredist(long long int x1, long long int y1, long long int x2,
                         long long int y2) {
  return ((x1 - x2) * (x1 - x2) + (y1 - y2) * (y1 - y2));
}
long long int nCr(long long int n, long long int r) {
  if (r == 0) return 1;
  return (n * nCr(n - 1, r - 1)) / r;
}
long long int countDivisors(long long int n) {
  long long int cnt = 0;
  for (int i = 1; i <= sqrt(n); i++) {
    if (n % i == 0) {
      if (n / i == i)
        cnt++;
      else
        cnt = cnt + 2;
    }
  }
  return cnt;
}
unsigned long long int countDivisibles(unsigned long long int A,
                                       unsigned long long int B,
                                       unsigned long long int M) {
  if (A % M == 0) return (B / M) - (A / M) + 1;
  return (B / M) - (A / M);
}
long long int xorRange(long long int x, long long int y) {
  if (x % 2 == 0) {
    long long int pattern[] = {y, 1, y + 1, 0};
    return pattern[(int)((y - x) % 4)];
  } else {
    long long int pattern[] = {x, x ^ y, x - 1, (x - 1) ^ y};
    return pattern[(int)((y - x) % 4)];
  }
}
unsigned long long int maxOrRange(unsigned long long int l,
                                  unsigned long long int r) {
  while (l < r) l &= (l + 1);
  return (l & r);
}
long long mul(long long a, long long b) { return (a * b) % 1000000007; }
long long mul(long a, long long b, long long c) { return mul(mul(a, b), c); }
long long mul(long long a, long long b, long long c, long long d) {
  return mul(mul(a, b), mul(c, d));
}
long long add(long long a, long long b) { return (a + b) % 1000000007; }
long long neg(long long a) {
  return (1000000007 - (a % 1000000007)) % 1000000007;
}
long long sub(long long a, long long b) { return add(a, neg(b)); }
long long minv(long long a) {
  int b = 1000000007 - 2;
  long long ans = 1;
  while (b) {
    if (b % 2) ans = mul(ans, a);
    a = mul(a, a);
    b /= 2;
  }
  return ans;
}
long long divi(long long a, long long b) { return mul(a, minv(b)); }
bool sortdesc(const std::tuple<int, int, int> &a,
              const std::tuple<int, int, int> &b) {
  return (std::get<0>(a) > std::get<0>(b));
}
std::vector<long long> fni(100000);
std::vector<long long> nni(100000);
std::vector<long long> fact(100000);
void Inv_Num_Fact_Factorial(long long p, long long N) {
  fni[0] = fni[1] = nni[0] = nni[1] = fact[0] = 1;
  for (int i = 1; i <= N; i++) {
    if (i >= 2) {
      nni[i] = mul(nni[p % i], (p - p / i));
      fni[i] = mul(nni[i], fni[i - 1]);
    }
    fact[i] = mul(fact[i - 1], i);
  }
}
long long fnCr(long long int N, long long int R) {
  return mul(fact[N], fni[R], fni[N - R]);
}
using namespace std;
long long powerr(long long x, long long y, long long m) {
  if (y == 0) return 1;
  long long p = powerr(x, y / 2, m) % m;
  p = (p * p) % m;
  return (y % 2 == 0) ? p : (x * p) % m;
}
long long modInverse(long long a, long long m) { return powerr(a, m - 2, m); }
long long andd(long long a, long long b) {
  while (a < b) {
    b -= (b & -b);
  }
  return b % 1000000007;
}
unsigned long long highestPowerof2(long long n) {
  unsigned long long p = (unsigned long long)log2(n);
  return (unsigned long long)pow(2, p);
}
int main() {
  ios_base::sync_with_stdio(0);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  int arr[n];
  for (int i = 0; i < n; i++) arr[i] = INT_MAX;
  bool check = true, goag = false;
  for (int i = 0; i < m; i++) {
    int a, b;
    cin >> a >> b;
    arr[a - 1] = min(arr[a - 1], b);
  }
  if (m < n)
    cout << -1;
  else {
    string s;
    for (int i = 0; i < n; i++) {
      if (arr[i] == INT_MAX) arr[i] = 0;
      s += to_string(arr[i]);
    }
    cout << stoi(s);
  }
  return 0;
}
