#include"bits/stdc++.h"
#include<boost/multi_array.hpp>
#include<boost/optional.hpp>
#include<boost/range/irange.hpp>
#include<boost/range/algorithm.hpp>
#include<boost/range/adaptors.hpp>
using namespace std;
namespace adaptor = boost::adaptors;


#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define rep3(i,m,n) for(int (i)=m;(i)<=(n);(i)++)
#define rep3rev(i,m,n) for(int (i)=m;(i)>=(n);(i)--)
typedef long long ll;


void Main(){
	int N,K;
   	cin >> N >> K;
   	vector<int> D(K);
   	rep(i,K) { cin >> D[i]; }  
  
   	auto keta = [&](int n){
    	int count = 1;
       	while(n>=10){
        	n /= 10;
           	count++;
       	}
       	return count;
   	};
   
   	// n の下から k 桁目の数字
   	// = n の上から (keta(n) - k + 1) 桁目の数字
   	auto digitk = [&](int n, int k){
       	rep(i,k-1){
          	n /= 10;
       	}
       	return n%10;
   	};
   	
  	// D[i] <-> E[i] = {0,1,2,3,4,5,6,7,8,9} - D
	vector<int> E(10-K);
    int j = 0;
  	int flag0; 
  	rep(i,10){
		flag0 = 0;
      	rep(k,K){	
      		if(i == D[k]){
				flag0 = 1;
              	break;
            }
        }
      	if(flag0 == 0){
          E[j] = i;
          ++j;
        }
    }
  
   	int ketaN = keta(N);
   	int flag, decided;
  	int temp;
   	vector<int> ans(ketaN+1);
  	K = 10-K;
  
    // 例外処理: N > E[K-1]*1111...111
    int ek = 1;
    rep(i,ketaN-1){
       ek *= 10;
       ek += 1;
    }
    ek *= E[K-1];
    
    if(N > ek){
        if(E[0]==0){
            ans[0]=1;
            rep3(i,1,ketaN){
              ans[i]=0;
            }
        }
        else{
           rep3(i,0,ketaN){
              ans[i]=0;
           }
        }
	    rep3(i,0,ketaN){ cout << E[ans[i]];}
  	    cout << endl; 
  	    return;
    }
    
   	// 調べる桁: digit = 1 からスタート. 最大で digit = ketaN まで.
   	// (A) N の digit 桁目と一致する E[i] がある？
   	// 	-> Yes: 暫定 ans[digit] = i. ++digit して (A) へ
   	// 	-> No : (B) (N の digit 桁目) < D[K-1] か？
   	//		-> Yes: (N の digit 桁目) を超える最小の D[j] を取ってきて ans[digit] = j. 
   	//				残りの桁は D[0].
   	//		-> No : ans[digit-1] = temp+1. 残りの桁は D[0].	
  	// 			[例外処理] 一番下の桁から見る. temp+1 = K ならば temp 

  	rep3(digit, 1, ketaN){
      	flag = 0;
      	decided = 0;
  		// (A)
    	rep(i,K){
   			if( digitk(N, ketaN - digit + 1) == E[i] ){
				ans[digit] = i;
          		flag = 1;
              	temp = i;
    			break;
       	 	}
    	}  	
      	// (B)
    	if(flag == 0){
          	if(digitk(N, ketaN - digit + 1) == 0){
            	ans[digit] = 0;
              	decided = 1;
            }
          	else if (digitk(N, ketaN - digit + 1) < E[K-1]){
  				rep3rev(j,K-2,0){            		
              		if(digitk(N, ketaN - digit + 1) > E[j]){
              			ans[digit] = j+1;
                      	decided = 1;
                      	break;
                	}
                }
            }
          	else {
              	ans[digit-1] = temp+1;
              	decided = 1;
              	break;
            }
        }
      	if(decided == 1){
			rep3(j,1,ketaN-digit){
          		ans[digit+j] = 0;
            }
        	break;
        }
  	}
  	
  	rep3rev(i,ketaN,1){
  	    if(ans[i]>=K){
  	        ans[i]=0;
  	        ans[i-1]++;
  	    }
  	}
  	
	rep3(i,1,ketaN){ cout << E[ans[i]];}
  	cout << endl; 
  	return;
    
}
  
int main(){
 cin.tie(nullptr);
 ios_base::sync_with_stdio(false);
 cout << fixed << setprecision(15);
 Main();
 return 0;
}

Measured memory_bytes: 256