#include<iostream>
#include<algorithm>
#include<map>
#include<vector>
using namespace std;
typedef long long li;
#define repa(i,a,n) for(int i=(a);i<(n);i++)
#define MOD 1000000000
#define rep(i,n) for(int i=0;i<(n);i++)

#define df 0
template<class T> void print(const T& t){ cout << t << "\n"; }
template<class T, class... Ts> void print(const T& t, const Ts&... ts) { cout << t; if (sizeof...(ts)) cout << " "; print(ts...); }
// vector 型
template<class T>
std::ostream& operator<<(std::ostream& os, const vector<T>& v){
  // ここでストリームに obj を書き込みます。
  for(const T& t:v) cout << t << " ";
  return os;
}


int pow(int a, int b){
  int x=1;
  rep(i,b){
    x*=a;
  }
  return x;
}

int judge(int a,vector<int>& s,vector<int>& c){
  string t;
  while(a){
    t.push_back(a%10+'0'); a/=10;
  }
  reverse(t.begin(),t.end());
  int n=s.size();
  rep(i,n){
    if(t[s[i]]!=c[i]+'0') return 0;
  }
  
  return 1;
}

int main(){
  int n,m; cin >>n >>m;
  int init=0,lst=pow(10,n),ans=-1;
  if(n>1) init=pow(10,n-1);
  vector<int> s(m),c(m);
  rep(i,m) {
    cin >>s[i] >>c[i];
    s[i]--;
  }
  if(df)print(s,c);
  repa(i,init,lst){
    if(judge(i,s,c)){
      ans=i;break;
    }
  }
  print(ans);
}

