// char と int の型のあれこれで面倒なことになってしまった
alias Tuple!(int, char) Pair;
void main(){
	int n, m;
	readf("%d %d\n", &n, &m);
	// 条件を保存
	Pair[] pair;
	foreach(i; 0..m){
		int s;
		char c;
		readf("%d %c\n", &s, &c);
		pair ~= Pair(s, c);
	}
	int ans = -1;
	foreach(i; 0..10^^3){
		if(i.to!string().length != n )continue;
		// 各条件に合うか調べていく
		bool isAcc = true;
		foreach(elm; pair){
			string tmp = i.to!string();
			if(tmp[elm[0]-1]!=elm[1].to!char()){
				isAcc = false;
				break;
				}
		}
		// 全ての条件に一致する
		if(isAcc){
			ans = i;
			break;
			}
	}
	ans.writeln();
}

import std.stdio, std.conv, std.algorithm, std.numeric, std.string, std.math, std.typecons;

// 1要素のみの入力
T _scan(T= int)(){return to!(T)( readln().chomp() );}
// 1行に同一型の複数入力
T[] _scanln(T = int)(){
	T[] ln;
	foreach(string elm; readln().chomp().split()){
		ln ~= elm.to!T();
	}
	return ln;
}

