#include <bits/stdc++.h>
//解説PDAの写し
using namespace std;

int main()
{
  int n, m;
  cin >> n >> m;
  //int,intのペアを要素として持つsize==mのvector pを宣言。
  pair<int, int> P;
  vector<P> p(m);
  //pに条件データを全部入れる
  for(int i = 0; i < m; i++){
    cin >> p[i].first >>p[i].second;
  }
  /*
  *オーダーがO(1000)と小さいので全ての要素について調べる。
  *xについて、一桁ずつvector dに入れる。
  *桁が指定と違えば次のxについて調べる
  *pに格納した条件を用いて、dに格納したxが正しいか一桁ずつ判定する。条件と違う桁があれば次のxについて調べる。
  *条件をスルーすればxを出力し、最後までループが回れば条件と一致するものは見つからなかったということなので-1を出力する。
  */
  for(int x = 0; x < 1000; x++){
    int keta = 1;
    int nx = x/10;
    vector<int> d(1,x%10);
    while(nx){
      keta++;
      //1の位から左に入れていく。例890 => 098 のようになる。
      d.push_back(nx%10);
      nx /= 10;
    }
    if(keta != n) continue;
    bool ok = true;
    //ここで正しい数字の順にしている。先の例を持ち出せば。098 => 890 のようになる。
    reverse(d.begin(), d.end());
    for(int i = 0; i < m; i++){
      if(d[p[i].first-1] != p[i].second) ok = false;
    }
    if(ok){
      cout << x << endl;
      return 0;
    }
  }
  cout << -1 << endl;
  return 0;
}
/*
*同じ桁に複数の指定があっても、どちらかは確実にfalseをはいてくれる。
*