#include "bits/stdc++.h"
#define _overload3(_1,_2,_3,name,...)name
#define _rep(i,n)repi(i,0,n)
#define repi(i,a,b)for(int i=int(a),i##_len=(b);i<i##_len;++i)
#define MSVC_UNKO(x)x
#define rep(...)MSVC_UNKO(_overload3(__VA_ARGS__,repi,_rep,_rep)(__VA_ARGS__))
#define all(c)c.begin(),c.end()
#define write(x)cout<<(x)<<'\n'
using namespace std; typedef long long ll; template<class T>using vv = vector<vector<T>>;
template<class T>auto vvec(int n, int m, T v) { return vv<T>(n, vector<T>(m, v)); }
constexpr int INF = 1 << 29, MOD = int(1e9) + 7; constexpr ll LINF = 1LL << 60;
struct aaa { aaa() { cin.tie(0); ios::sync_with_stdio(0); cout << fixed << setprecision(10); }; }aaaa;

int main() {
    int N, M;
    cin >> N >> M;
    vv<int> A(N);
    rep(i, M) {
        int s, c;
        cin >> s >> c;
        A[s - 1].push_back(c);
    }

    string ans(N, '_');
    rep(i, N) {
        if (A[i].size()) {
            sort(all(A[i]));
            if (A[i].front() != A[i].back() || (i == 0 && A[i].front() == 0)) {
                write(-1);
                return 0;
            }
            ans[i] = '0' + A[i].front();
        }
        else ans[i] = i == 0 ? '1' : '0';
    }
    write(ans);
}