import sys
from io import StringIO
import unittest
import os
import collections

# 再帰処理上限(dfs作成時に設定するのが面倒なので限度近い値を組み込む)
sys.setrecursionlimit(999999999)


# 実装を行う関数
def resolve(test_def_name=""):
    n, m = map(int, input().split())
    sc_s = [list(input().split()) for i in range(m)]



    check = ["-1", "-1"]
    for i in sorted(sc_s, key=lambda x: [x[0], x[1]]):
        if check[0] == i[0] and not check[1] == i[1]:
            print(-1)
            return
        check = i

    for i in sorted(sc_s):
        if i[0] == "1" and i[1] == "0" and not n == 1:
            print(-1)
            return

    ans = ["0" for i in range(n + 1)]
    for sc in sc_s:
        ans[int(sc[0])] = sc[1]

    if n > 1 and ans[1] == "0":
        ans[1] = "1"

    ans = int("".join(ans))

    print(ans)


# テストクラス
class TestClass(unittest.TestCase):
    def assertIO(self, assert_input, output):
        stdout, sat_in = sys.stdout, sys.stdin
        sys.stdout, sys.stdin = StringIO(), StringIO(assert_input)
        resolve(sys._getframe().f_back.f_code.co_name)
        sys.stdout.seek(0)
        out = sys.stdout.read()[:-1]
        sys.stdout, sys.stdin = stdout, sat_in
        self.assertEqual(out, output)

    def test_input_1(self):
        test_input = """3 3
1 7
3 2
1 7"""
        output = """702"""
        self.assertIO(test_input, output)

    def test_input_2(self):
        test_input = """3 2
2 1
2 3"""
        output = """-1"""
        self.assertIO(test_input, output)

    def test_input_3(self):
        test_input = """3 1
1 0"""
        output = """-1"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_1(self):
        test_input = """2 1
        1 2"""
        output = """20"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_2(self):
        test_input = """1 1
        1 0"""
        output = """0"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_3(self):
        test_input = """2 1
        2 0"""
        output = """10"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_4(self):
        test_input = """3 1
        3 0"""
        output = """100"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_5(self):
        test_input = """3 3
        3 0
1 2
2 1"""
        output = """210"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_5(self):
        test_input = """3 0
"""
        output = """100"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_6(self):
        test_input = """2 0
"""
        output = """10"""
        self.assertIO(test_input, output)

    # 自作テストパターンのひな形(利用時は「tes_t」のアンダーバーを削除すること
    def test_1original_7(self):
        test_input = """1 0
"""
        output = """0"""
        self.assertIO(test_input, output)


# 実装orテストの呼び出し
if __name__ == "__main__":
    if os.environ.get("USERNAME") is None:
        # AtCoder提出時の場合
        resolve()

    else:
        # 自PCの場合
        unittest.main()


Measured memory_bytes: 77484