#include <iostream>
#include <boost/multiprecision/cpp_int.hpp>
using namespace std;

#define rep(i,n) for(int i = 0; i < (n); ++i)
#define repN(i,n) for(int i = (n); i > 0; --i)
#define rep2(i,s,n) for(int i = s; i < (n); ++i)
#define rep2N(i,e,n) for(int i = e; i < ((e) - (n)); --i)

int N, M;
int digit[5];

void Solve()
{
  if (M == 0){
      puts("-1");
      return;
  }

  int ans = digit[1] * 100 + digit[2] * 10 + digit[3];

  switch(N){
    case 3: if (digit[1] == 0) ans = -1; break;
    case 2: if (digit[1] != 0) ans = -1;
            else if (digit[2] == 0) ans = -1; break;
    case 1: if (ans == 0 && N ==1) ans = 0;
            else if (digit[1] != 0 || digit[2] != 0) ans = -1; break;
  }
  cout << ans << endl;
}

void Init()
{
  cin >> N >> M;
  int tmp1, tmp2;
  bool set[5];
  for (int i = 0; i < 5; ++i){
    set[i] = false;
    digit[i] = 0;
  }

  for (int i = 0; i < M; ++i){
    cin >> tmp1 >> tmp2;
    if (set[tmp1]){ // 既にその桁が入力されていたら
      if (tmp2 < digit[tmp1]){ // 新しく入力された数のほうが小さくて
        if (tmp2 != 0){    // 0以外なら単純に入れ替え
           digit[tmp1] = tmp2;
        } else if (tmp1 != N){ // 入れ替え数が0で最上位桁でなければ
           digit[tmp1] = tmp2; // = 0;
        } 
      }
    } else {
      digit[tmp1] = tmp2;
      set[tmp1] = true;
    }
  }
}
void Clean(){}

int main(){ Init(); Solve(); Clean(); return 0; }
