N,M=input().split()
n,m=int(N),int(M)
p=[[0,0] for i in range (m)]

a=[0 for i in range(n)] #建一个列表，把补完的存进去，输出的时候按a[1]*10^n这样加起来输出
for i in range(m):
    R,S=input().split()
    r,s=int(R),int(S)
    p[i][0]=r 
    p[i][1]=s

flg1=False
#if n==1:
 #   print(p[0][1])

#大概思路是如果是一位数，直接把它打出来
#如果不是一位数，排除掉不可以的情况
#如果可以，分两种情况
#第一种是首项未被规定，那就首项补1，其余的没规定的补0
#第二种是首项被规定，那就剩下的缺的补0，然后打出来。 end
#对的，1-5
if n>1:
    for i in range (m):  #排除首项为0的情况（不可以）
        if p[i][0]==1 and p[i][1]==0:
            print(-1)
    
    for i in range(m-1): #排除同一位是不同数（不可以）
        for q in range(i+1,m):
            if p[i][0]==p[q][0] and p[i][1]!=p[q][1]:
                print(-1)

    for i in range (m):
        if p[i][0]==1:  #判断第一位是否被规定， 嗯对  完美
            flg1=True
          
    if flg1:  #首位是0
        a[0]=1
        for i in range(m):
            a[p[i][0]]=p[i][1]
            
        for i in range(n):
            print(a[i]*10^(n-i))
        
        #就是想首位不是0 
    if not flg1:
        for i in range(m):
            a[p[i][0]]=p[i][1]
        
        for i in range(n):
            print(a[i]*10^(n-i))

if n==1:
    print(p[0][1])
