'use strict'

function main(s) {  
  
  // 入力処理
  const input = s.split('\n');
  let price = Number(input[0].split(' ')[0]);
  const hateNums = input[1].split(' ');

  // 嫌いな数字が含まれなくなるまでインクリメント
  while(hasHateNumber(price, hateNums)) {
    price += 1;
  }

  // 出力
  console.log(price);
}

function hasHateNumber(num, hateNums) {
  let hasHateNum = false;
  
  String(num).split('').forEach((x) => {
    if(hateNums.includes(x)) {
      hasHateNum = true;
    };
  })

  return hasHateNum;
}

// Array.prototype.includesが使えないため、互換コードを用意
if (!Array.prototype.includes) {
  Object.defineProperty(Array.prototype, 'includes', {
    value: function(searchElement, fromIndex) {

      if (this == null) {
        throw new TypeError('"this" is null or not defined');
      }

      // 1. Let O be ? ToObject(this value).
      var o = Object(this);

      // 2. Let len be ? ToLength(? Get(O, "length")).
      var len = o.length >>> 0;

      // 3. If len is 0, return false.
      if (len === 0) {
        return false;
      }

      // 4. Let n be ? ToInteger(fromIndex).
      //    (If fromIndex is undefined, this step produces the value 0.)
      var n = fromIndex | 0;

      // 5. If n ≥ 0, then
      //  a. Let k be n.
      // 6. Else n < 0,
      //  a. Let k be len + n.
      //  b. If k < 0, let k be 0.
      var k = Math.max(n >= 0 ? n : len - Math.abs(n), 0);

      function sameValueZero(x, y) {
        return x === y || (typeof x === 'number' && typeof y === 'number' && isNaN(x) && isNaN(y));
      }

      // 7. Repeat, while k < len
      while (k < len) {
        // a. Let elementK be the result of ? Get(O, ! ToString(k)).
        // b. If SameValueZero(searchElement, elementK) is true, return true.
        if (sameValueZero(o[k], searchElement)) {
          return true;
        }
        // c. Increase k by 1. 
        k++;
      }

      // 8. Return false
      return false;
    }
  });
}

main(require("fs").readFileSync("/dev/stdin", "utf8"));

