package main

import (
	"bufio"
	"fmt"
	"os"
	"strconv"
)

var sc = bufio.NewScanner(os.Stdin)

func nextStr() string {
	sc.Scan()
	return sc.Text()
}

func nextInt() int {
	sc.Scan()
	i, e := strconv.Atoi(sc.Text())
	if e != nil {
		panic(e)
	}
	return i
}

func main() {
	sc.Split(bufio.ScanWords)
	n := nextInt()
	m := nextInt()
	var ans int
	dig := map[int]int{
		1: -9,
		2: -9,
		3: -9,
	}

	//s桁目の値が未指定または指定済みの値と一致する場合はOK それ以外は除外する
	for i := 0; i < m; i++ {
		s := nextInt()
		c := nextInt()
		if dig[s] == -9 {
			dig[s] = c
		} else if dig[s] == c {
			continue
		} else {
			ans = -1
			break
		}
	}
	//先頭に0が指定されたら除外する
	if n == 3 && (dig[1] == 0 || dig[1] == -9) || n == 2 && (dig[1] == 0 || dig[1] == -9) {
		ans = -1
	}

	//未指定の桁は0として最小値を求める
	if ans != -1 {
		for i := 1; i <= n; i++ {
			if dig[i] == -9 {
				dig[i] = 0
			}
		}
		ans = dig[1] * 100 + dig[2] * 10 + dig[3]
	}
	fmt.Println(ans)
}