#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pi;
typedef pair<ll,ll> pl;
typedef vector<int> vi;
typedef vector<ll> vl;

#define f first
#define s second
#define lb lower_bound
#define ub upper_bound
#define all(x) x.begin(), x.end()
#define ins insert
#define pi  3.14159265359
#define mod 1000000007


int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);

    int n,m;
    cin>>n>>m;
    char val[5+1]={'a','a','a','a','a'};
    bool t=false;
    for(int i=1;i<=m;i++)
    {
        int x;char y;
        cin>>x>>y;
        if(val[x]=='a'){
            val[x]=y;
        }else{
        if(val[x]!=y){
            t=true;
        }
        }
    }

    if(t){
        cout<<-1;
    }else if(val[1]=='0'&&n>=2){
        cout<<-1;
    }else{
     if(val[1]=='a'){
        if(n>=2)
        val[1]='1';
        else
        val[1]='0';
     }
     for(int i=1;i<=n;i++)
     {
         if(val[i]!='a') cout<<val[i];
         else  cout<<0;
     }
    }
}



#include <bits/stdc++.h>

int solve() {
  int N, M; std::cin >> N >> M;
  std::vector<int> s(M);
  std::vector<int> c(M);
  for (int i = 0; i < M; ++i) std::cin >> s[i] >> c[i];

  /* 全探索 */
  for (int n = 0; n < std::pow(10,N); ++n) {
    int digit = 1;      // 0は1桁
    std::vector<int> each_num(1, n%10); // 一の位
    int x = n/10;

    while (x) {
      digit++;
      each_num.push_back(x%10);
      x /= 10;
    }

    if (digit != N) continue; // 桁数の条件を満たさない

    std::reverse(each_num.begin(), each_num.end());

    bool ok = true; // 条件を満たす整数が存在するかどうか
    
    for (int i = 0; i < M; ++i)
      if (each_num[s[i]-1] != c[i]) ok = false; // 一つでも条件を満たさないものがあれば

    if (ok) return n; // 桁数とそれぞれの桁の数字が条件を満たす
  }
  
  return -1;
  
}

int main() {
  std::cout << solve() << std::endl;

  return 0;
}
