#include <bits/stdc++.h>
#define lli long long int
#define pb push_back
#define mod 1000000007
#pragma GCC optimize ("-O3")
#define mod2 998244353
#define MAXN 1000000000
#define v32 vector<int>
#define v64 vector<lli>
#define v1024 vector <vector <int>>
#define v4096 vector <vector <lli>>
#define vt vector
#define f(x, y, z) for (lli x = y; x < z; x++)
#define fd(x, y, z) for (lli x = y; x > z; x--)
#define lb lower_bound
#define ld long double
#define m64 map<lli,lli>
#define m32 map<int,int>
#define m64it map<lli,lli>::iterator
#define m32it map<int,int>::iterator
#define fastio ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0)
#define ist insert
#define endl "\n"
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
#define ordered_set tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> 
#define p_q priority_queue 
#define min_p_q priority_queue <int,vt <int>,greater <int>>
using namespace std;
using namespace __gnu_pbds; 

template <typename T> 
void DEBUG_ARR(vt<T> a,char c)
{
	f(i,0,a.size())cout<<a[i]<<c;
	cout<<"\n";
}

lli tmod(lli x,lli m=mod){return (x%m+m)%m;}//USE AT YOUR OWN RISK
lli power(lli x, lli y) 
{
    lli res = 1;  
   
    while (y > 0) 
    { 
        if (y & 1) 
            res = (res*x)%mod; 
        y = y>>1; 
        x = (x*x)%mod;  
    }
    if(res<0)
       res+=mod; 
    return res; 
}
// lli fact[2000009];
// lli ncr(lli n,lli r){
//     lli ans=fact[n];
//     if(r>n)return 0;
//     ans=(ans*power(fact[n-r],mod-2))%mod;
//     ans=(ans*power(fact[r],mod-2))%mod;
//     return ans;
// }

int main() 
{ 
    // fact[0]=1;
    // f(i,1,2000001)fact[i]=(i*fact[i-1])%mod;
    fastio;
    int t;
    // cin>>t;	
    t=1;
	while(t--){
        int n,m;cin>>n>>m;
        int ans=0;
        int s[m],c[m];
        f(i,0,m)cin>>s[i]>>c[i];
        ans=-1;
        if(n==1){
            f(i,0,10){
                string x=to_string(i);
                // reverse(x.begin(),x.end());

                int flag=1;
                f(j,0,m){
                    if((x[s[j]-1]!=c[j]+'0'))flag=0;
                }   
                if(flag){
                    ans=i;
                    break;
                }
            }
            cout<<ans<<"\n";
        }
        else if(n==2){
            f(i,10,100){
                string x=to_string(i);
                // reverse(x.begin(),x.end());
                int flag=1;
                f(j,0,m){
                    if((x[s[j]-1]!=c[j]+'0'))flag=0;
                }   
                if(flag){
                    ans=i;
                    break;
                }
            }
            cout<<ans<<"\n";
        }
        else{
            f(i,100,1000){
                string x=to_string(i);
                // reverse(x.begin(),x.end());
                                // cout<<x<<"\n";
                int flag=1;
                f(j,0,m){
                    if((x[s[j]-1]!=c[j]+'0'))flag=0;
                }   
                // cout<<flag<<"\n";
                if(flag){
                    ans=i;
                    break;
                }
            }
            cout<<ans<<"\n";
        }
	}

    return 0; 	
}

Measured memory_bytes: 256