#include<bits/stdc++.h>
using namespace std;
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;
template<class T> using oset=tree<T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
#define pb push_back
#define N 200001
#define ll long long
#define int ll 
#define pi pair<int , int>
#define pip pair<pair ,int>
#define mp make_pair 
#define f first
#define s second
#define mod 998244353
ll Mod(ll x, ll y, int p) 
{ll res = 1; x = x % p;
while (y > 0) 
{if(y & 1) res = (res*x) % p; 
y = y>>1;x = (x*x) % p; 
}return res; 
}
int* getlps(string pattern){
 int len = pattern.length();
 int * lps = new int[len];
 lps[0] = 0;
 int i = 1 , j = 0;
 while(i < len){
  if(pattern[i] == pattern[j]){
	  lps[i] = j+1;
   i++;
   j++;
  }
  else{
		if(j != 0){
		 j = lps[j-1];
		}
		else{
		 lps[i] = 0;
		 i++;
		}
  }
 }
 return lps;
}
class Triplet{
 public:
 int x ;
 int y ;
 int gcd;
};
Triplet extendedEuclid(int a , int b){
 if(b == 0){Triplet ans; ans.gcd = a;ans.x = 1;ans.y = 0;return ans;}
 Triplet smallAns = extendedEuclid(b , a%b);
 Triplet ans;
 ans.gcd = smallAns.gcd;
 ans.x = smallAns.y;
 ans.y = smallAns.x - (a/b)*smallAns.y;
 return ans;
}
int mmInverse(int a , int m){
 Triplet ans = extendedEuclid(a , m);
 return ans.x;
}
int32_t main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin>>n>>m;
int arr[n+1];
if( m == 0){
 cout<<"0"<<endl;
 return 0;
}
for(int i = 1 ; i<= n ;i++)arr[i] = INT_MAX;
while(m--){
 int pos , val;
 cin>>pos>>val;
 // pos => 1 and i have to put zero , then can't do that 
 if(n == 1){
    if(pos == 1 && val == 0)arr[pos] = val;
 }
 arr[pos] = ((pos == 1 && val == 0)?arr[pos]:min(arr[pos] , val));
}
for(int i = 2 ; i <= n ; i++){
 if(arr[i] == INT_MAX){
  arr[i] = 0;
 }
}
for(int i = 1 ; i<= n ;i++){
  if(arr[i] == INT_MAX){
   cout<<"-1"<<endl;
   return 0;
  }
}
for(int i = 1;  i<= n ;i++){
 cout<<arr[i];
}

}

