/**
 * 
 */

import static java.lang.System.out;

import java.util.ArrayList;
import java.util.List;

/**
 * @description 0～9 挑k個數字, 組出最接近 A 的數字
 * 				input(A, k)
 * 				1 <= A <= 10^15, 1<=k<=10
 * 
 *
 */
public class Main {

	/**
	 * @param args
	 */
	
	private static String strOrigA;
	
	private static int origK;
	
	private static List<Integer> listCandidateDigits;
	
	private static List<Long> listCandidateA;
	
	public static void main(String[] args) {

		long A = 3355798521L;
		int k = 5;
//		long A = 3355798521L;
//		int k = 10;
//		long A = 262004L;
//		int k = 2;
//		long A = 8000L;
//		int k = 1;
//		long A = 1000L;
//		int k = 1;
//		long A = 2243L;
//		int k = 2;
//		long A = 88449L;
//		int k = 2;
//		long A = 123456789L;
//		int k = 1;
		out.println(input(A, k));
	}
	
	private static void recur(StringBuffer sbHead, int x, int k, boolean flag) {
		if(flag) {
			if(x == strOrigA.length()) {
				if(countDigits(sbHead.toString()) <= origK) {
					listCandidateA.add(Long.parseLong(sbHead.toString()));
				}
			} else {
				for(Integer i : listCandidateDigits) {
					recur((new StringBuffer(sbHead)).append(new Integer(i)), x + 1, 0, true);
				}
			}
		} else {
			if(k == 0) {
				if(x == strOrigA.length()) {
					listCandidateA.add(Long.parseLong(sbHead.toString()));
				} else {
					if(listCandidateDigits.contains(new Integer(strOrigA.charAt(x)))) {
						 recur((new StringBuffer(sbHead)).append(strOrigA.charAt(x)), x + 1, 0, false);
					} else {
						for(Integer i : listCandidateDigits) {
							recur((new StringBuffer(sbHead)).append(new Integer(i)), x + 1, 0, true);
						}
					}
				}
			} else if(k == 1) {
				int iLeftmost = strOrigA.charAt(x) - '0';
				
				//	for special case
				if(sbHead.length() == 0 && iLeftmost - 1 == 0) {
					int iBorrowDigit = strOrigA.charAt(x + 1) - '0';
					if(iLeftmost * 10 + iBorrowDigit == 10) {
						for(int i = x + 1; i < strOrigA.length(); ++i) {
							sbHead.append("9");
						}
						listCandidateA.add(Long.parseLong(sbHead.toString()));
						return;
					} else {
						listCandidateDigits.add(new Integer(iLeftmost));
						recur((new StringBuffer(sbHead)).append(iLeftmost), x + 1, 0, false);
						
						listCandidateDigits.add(new Integer(9));
						recur((new StringBuffer(sbHead)).append(9), x + 2, 0, false);
					}
				}
				
				if(listCandidateDigits.contains(new Integer(iLeftmost))) {
					recur((new StringBuffer(sbHead)).append(iLeftmost), x + 1, 1, false);
				} else {
					listCandidateDigits.add(new Integer(iLeftmost));
					recur((new StringBuffer(sbHead)).append(iLeftmost), x + 1, 0, false);
					if(iLeftmost - 1 >= 0) {
						listCandidateDigits.add(new Integer(iLeftmost - 1));
						recur((new StringBuffer(sbHead)).append(iLeftmost - 1), x + 1, 0, false);
					}
				}
			} else {
				int iLeftmost = strOrigA.charAt(x) - '0';
				if(listCandidateDigits.contains(new Integer(iLeftmost))) {
					recur((new StringBuffer(sbHead)).append(iLeftmost), x + 1, k, false);
				} else {
					listCandidateDigits.add(new Integer(iLeftmost));
					recur((new StringBuffer(sbHead)).append(iLeftmost), x + 1, k - 1, false);
				}
			}
		}
	}
	
	
	
	private static long input(long A, int k) {
		strOrigA = "" + A;
		if(countDigits(strOrigA) <= k) {
			return A;
		}
		origK = k;
		listCandidateA = new ArrayList<Long>();
		listCandidateDigits = new ArrayList<Integer>();
		recur(new StringBuffer(), 0, k, false);
		
		
		long answer = -1L;
		if(listCandidateA.size() > 0) {
			answer = listCandidateA.get(0);
			long distance = Math.abs(answer - A);
			for(int i = 1; i < listCandidateA.size(); ++i) {
				long tmp = Math.abs(listCandidateA.get(i) - A);
				if(tmp < distance) {
					distance = tmp;
					answer = listCandidateA.get(i);
				}
			}
		}
		
		return answer;
	}
	
	/**
	 * 回傳listOrig用到的數字List
	 * 
	 * @param List<Integer>
	 * @return List<Integer>
	 */
	private static int countDigits(String strOrig) {
		boolean ary[] = new boolean[10];
		StringBuffer sb = new StringBuffer();
		int len = strOrig.codePointCount(0, strOrig.length());
		for(int i = 0; i < len; ++i) {
			int x = strOrig.codePointAt(i) - '0';
			if(x < 10 && false == ary[x]) {
				ary[x] = true;
				sb.append(x);
			}
		}
		return sb.length();
	}
}
