And where the are the phone numbers?

You are given a string s consisting of lowercase English letters and an integer k. Find the lexicographically smallest string t of length k, such that its set of letters is a subset of the set of letters of s and s is lexicographically smaller than t.

It's guaranteed that the answer exists.

Note that the set of letters is a set, not a multiset. For example, the set of letters of abadaba is {a, b, d}.

String p is lexicographically smaller than string q, if p is a prefix of q, is not equal to q or there exists i, such that pi < qi and for all j < i it is satisfied that pj = qj. For example, abc is lexicographically smaller than abcd , abd is lexicographically smaller than abec, afa is not lexicographically smaller than ab and a is not lexicographically smaller than a.

Input

The first line of input contains two space separated integers n and k (1 ≤ n, k ≤ 100 000) — the length of s and the required length of t.

The second line of input contains the string s consisting of n lowercase English letters.

Output

Output the string t conforming to the requirements above.

It's guaranteed that the answer exists.

Examples

Input

3 3
abc


Output

aca


Input

3 2
abc


Output

ac


Input

3 3
ayy


Output

yaa


Input

2 3
ba


Output

baa

Note

In the first example the list of strings t of length 3, such that the set of letters of t is a subset of letters of s is as follows: aaa, aab, aac, aba, abb, abc, aca, acb, .... Among them, those are lexicographically greater than abc: aca, acb, .... Out of those the lexicographically smallest is aca.
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashSet;
import java.util.StringTokenizer;

public class CF940C {

	public static void main(String[] args) {
		FastReader fr = new FastReader();
		int n = fr.nextInt();
		int k = fr.nextInt();
		String str = fr.nextLine();
		ArrayList<Character> al = new ArrayList<Character>();
		boolean[] isPresent = new boolean[26];
		for (int i = 0; i < n; i++) {
			if (!isPresent[str.charAt(i) - 97]) {
				al.add(new Character(str.charAt(i)));
				isPresent[str.charAt(i) - 97] = true;
			}
		}
		Collections.sort(al);
		// System.out.println(al.toString());
		if (k > n) {
			StringBuilder sb = new StringBuilder();
			for (int i = 0; i < k - n; i++)
				sb.append(al.get(0));
			System.out.println(str + sb.toString());
			return;
		} else {
			StringBuilder sb = new StringBuilder();
			int i = 0;
			for (i = k - 1; i >= 0; i--) {
				if (isThisLast(al, str.charAt(i))) {
					sb.append(al.get(0));
				} else {
					sb.append(getNext(al, str.charAt(i)));
					break;
				}
			}
			for (int j = i - 1; j >= 0; j--)
				sb.append(str.charAt(j));
			System.out.println(sb.reverse().toString());
		}
	}

	static char getNext(ArrayList<Character> al, char c) {
		for (int i = 0; i < al.size(); i++) {
			if (al.get(i) == c)
				return (char) al.get(i + 1);
		}
		return ' ';
	}

	static boolean isThisLast(ArrayList<Character> al, char c) {
		if (al.get(al.size() - 1) == c)
			return true;
		return false;
	}

	// Better IO Class
	static class FastReader {
		BufferedReader br;
		StringTokenizer st;

		FastReader() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

		String next() {
			while (st == null || !st.hasMoreElements()) {
				try {
					st = new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			}
			return st.nextToken();
		}

		public int nextInt() {
			return Integer.parseInt(next());
		}

		public long nextLong() {
			return Long.parseLong(next());
		}

		public Double nextDouble() {
			return Double.parseDouble(next());
		}

		public Float nextFloat() {
			return Float.parseFloat(next());
		}

		String nextLine() {
			String str = "";
			try {
				str = br.readLine();
			} catch (IOException e) {
				System.out.println(e);
			}
			return str;
		}
	}

}
