use std::io::*;
use std::str::FromStr;
use std::collections::HashMap;
 
fn read<T: FromStr>() -> T {
    let stdin = stdin();
    let stdin = stdin.lock();
    let token: String = stdin
        .bytes()
        .map(|c| c.expect("failed to read char") as char)
        .skip_while(|c| c.is_whitespace())
        .take_while(|c| !c.is_whitespace())
        .collect();
 
    token.parse().ok().expect("failed to parse token")
}
 
fn main() {
    let n: u8 = read();
    let m: usize = read();
    let mut map = HashMap::new();
    let mut flag = true;
 
    for _i in 0..m {
        let s: u8 = read();
        let c: u8 = read();
        let value = map.entry(s).or_insert(c);
        //同じ桁で異なる値が設定された場合
        if c != *value {
            flag = false;
        }
    }
 

    //答えを作れない場合
    if flag == false {
        println!("-1");
        return;
    }

    //1桁で0の場合
    if n == 1 & map.get(&1) == Some(&0){
        println!("0");
        return;
    }

    //2桁以上の場合
    for i in 1 .. n + 1 {
        //1桁目が未設定の場合
        if map.get(&1) == None {
            print!("1");
            break;
        //1桁目が0設定の場合
        } else if map.get(&1) == Some(&0) {
            println!("-1");
            break;
        }

        if map.get(&i) == None {
            print!("0");
        } else {
            print!("{}", map.get(&i).unwrap());
        }
    }
 
}