using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class C {
    static void Main(string[] args) {
        var st = Console.ReadLine().Split().Select(int.Parse).ToArray();
        int N = st[0];
        int M = st[1];
        var s = new int[M];
        var c = new int[M];

        //桁ごとの数字を配列に収める
        var keta = new int[N];
        for (int i = 0; i < N; i++) {
            keta[i] = -1;
        }

        for (int i = 0; i < M; i++) {
            var x = Console.ReadLine().Split().Select(int.Parse).ToArray();
            s[i] = x[0] - 1;
            c[i] = x[1];
        }

        //もしスタートがゼロだったらアウト
        for (int i = 0; i < M; i++) {
            if (s[i] == 0 && c[i] == 0) {
                Console.WriteLine("No");
                return;
            }
        }
        //もし違う数字の組み合わせがあったらアウト
        for (int i = 0; i < M; i++) {
            for (int j = i + 1; j < M; j++) {
                if (i != j) {
                    if (s[i] == s[j]) {
                        if (c[i] != c[j]) {
                            Console.WriteLine("No");
                            return;
                        }
                    }
                }
            }
        }

        for (int i = 0; i < M; i++) {
            keta[s[i]] = c[i];
        }


        string ans = "";

        for (int i = 0; i < N; i++) {
            //頭だけは特別扱い
            if (i == 0) {
                if (keta[i] == -1) {
                    ans += "1";
                } else {
                    ans += keta[i].ToString();
                }
                continue;
            }

            if (keta[i] == -1) {
                ans += "0";
            } else {
                ans += keta[i].ToString();
            }
        }
        Console.WriteLine(ans);


    }
}