#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef unsigned int uint;
typedef unsigned long long ull;
#define REP(i, m, n) for(ll i = (ll)m; i < (ll)n; i++)
#define PER(i, m, n) for(ll i = (ll)m; i > (ll)n; i--)
#define INF 1e9
#define ALL(v) v.begin(), v.end()
#define _GLIBCXX_DEBUG

template <uint MD> struct ModInt {
    using M = ModInt;
    const static M G;
    uint v;
    ModInt(ll _v = 0) { set_v(uint(_v % MD + MD)); }
    M& set_v(uint _v) {
        v = (_v < MD) ? _v : _v - MD;
        return *this;
    }
    explicit operator bool() const { return v != 0; }
    M operator-() const { return M() - *this; }
    M operator+(const M& r) const { return M().set_v(v + r.v); }
    M operator-(const M& r) const { return M().set_v(v + MD - r.v); }
    M operator*(const M& r) const { return M().set_v(uint(ull(v) * r.v % MD)); }
    M operator/(const M& r) const { return *this * r.inv(); }
    M& operator+=(const M& r) { return *this = *this + r; }
    M& operator-=(const M& r) { return *this = *this - r; }
    M& operator*=(const M& r) { return *this = *this * r; }
    M& operator/=(const M& r) { return *this = *this / r; }
    bool operator==(const M& r) const { return v == r.v; }
    M pow(ll n) const {
        M x = *this, r = 1;
        while (n) {
            if (n & 1) r *= x;
            x *= x;
            n >>= 1;
        }
        return r;
    }
    M inv() const { return pow(MD - 2); }
    friend ostream& operator<<(ostream& os, const M& r) { return os << r.v; }
};
using Mint = ModInt<1000000007>;

const double PI = 3.14159265358979323846;

bool compare_by_b(pair<int, int> a, pair<int, int> b) {
    if(a.second != b.second){
        return a.second < b.second;
    }else{
        return a.first < b.first;
    }
}

bool is_prime(long long N) {
    if (N == 1) return false;
    for (long long i = 2; i * i <= N; ++i) {
        if (N % i == 0) return false;
    }
    return true;
}

int main(){
    int n, m;
    cin >> n >> m;
    vector<pair<int, int>> p(m);
    REP(i, 0, m){
        int a, b;
        cin >> a >> b;
        p[i] = make_pair(a, b);
    }
    int ans = -1;

    REP(i, 0, 1000){
        string s = to_string(i);
        bool ok[3] = {true, true, true};

        REP(j, 0, m){
            if(i <= 9){
                if(p[j].first == 1){
                    if(s[0] - '0' != p[j].second){
                        ok[0] = false;
                        break;
                    }
                }
                else{
                    ok[0] = false;
                    break;
                }
            }
            else if(10 <= i && i < 100){
                if(p[j].first == 1){
                    if(s[0] - '0' != p[j].second){
                        ok[0] = false;
                        break;
                    }
                }
                else if(p[j].first == 2){
                    if(s[1] - '0' != p[j].second){
                        ok[1] = false;
                        break;
                    } 
                }
                else{
                    ok[1] = false;
                    break;
                }
            }
            else{
                if(p[j].first == 1){
                    if(s[0] - '0' != p[j].second){
                        ok[0] = false;
                        break;
                    }
                }
                else if(p[j].first == 2){
                    if(s[1] - '0' != p[j].second){
                        ok[1] = false;
                        break;
                    } 
                }
                else if(p[j].first == 3){    
                    if(s[2] - '0' != p[j].second){
                        ok[2] = false;
                        break;
                    }
                }
            }
        }
        if(ok[0] && ok[1] && ok[2] && (int)s.length() == n){
            ans = i;
            break;
        }
    }

    cout << ans << endl;
}


Measured memory_bytes: 3644