Problem: Let's define the cost of a string s as the number of index pairs i and j (1 ≤ i < j < |s|) such that s_i = s_j and s_{i+1} = s_{j+1}.

You are given two positive integers n and k. Among all strings with length n that contain only the first k characters of the Latin alphabet, find a string with minimum possible cost. If there are multiple such strings with minimum cost — find any of them.

Input

The only line contains two integers n and k (1 ≤ n ≤ 2 ⋅ 10^5; 1 ≤ k ≤ 26).

Output

Print the string s such that it consists of n characters, each its character is one of the k first Latin letters, and it has the minimum possible cost among all these strings. If there are multiple such strings — print any of them.

Examples

Input


9 4


Output


aabacadbb


Input


5 1


Output


aaaaa

Input


10 26


Output


codeforces

Solution (in JAVA):

Solution:
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;

public class Main {

	public static void main(String[] args) throws NumberFormatException, IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		String[] st = br.readLine().split(" ");

		int n = Integer.parseInt(st[0]);
		int k = Integer.parseInt(st[1]);

		char[] ch = new char[26];
		ch[0] = 'a';
		for (int i = 1; i < 26; i++)
			ch[i] = (char) (ch[i - 1] + 1);
		StringBuilder sb = new StringBuilder();
		int cnt = 0;
		for (char i = 'a'; i < 'a' + k; i++) {
			sb.append(i);
			for (char j = (char) (i + 1); j < 'a' + k; j++) {
				sb.append(i);
				sb.append(j);
				cnt++;
			}
			if (cnt >= n)
				break;
		}
		while (sb.length() < n)
			sb.append(sb);
		System.out.println(sb.toString().substring(0, n));

	}

	static long[][] ncrcoll(int n, int k, int p) {
		long[][] arr = new long[n + 1][k + 1];
		for (int i = 1; i < arr.length; i++) {
			arr[i][0] = 1;
		}
		for (int i = 1; i < arr.length; i++) {
			for (int j = 1; j <= i && j < arr[0].length; j++) {
				if (i == 1 && j == 1) {
					arr[i][j] = 1;
				} else {
					arr[i][j] = (arr[i - 1][j] + arr[i - 1][j - 1]) % (p);
				}
			}
		}
		return arr;
	}

	public static long xpown(long x, long n) {
		long res = 1;
		while (n > 0) {
			if (n % 2 != 0) {
				res = (res * x) % 1000000007;
				n--;
			} else {
				x = (x * x) % 1000000007;
				n = n / 2;
			}
		}
		return res;
	}

	public static int[] arrayinput(BufferedReader br) throws NumberFormatException, IOException {
		int n = Integer.parseInt(br.readLine());

		int[] arr = new int[n];

		String[] temp = br.readLine().split(" ");

		for (int i = 0; i < arr.length; i++) {
			arr[i] = Integer.parseInt(temp[i]);
		}

		return arr;

	}

	public static class Pair implements Comparable<Pair> {
		int a;
		int b;

		Pair(int x, int y, int gcd) {
			this.a = x;
			this.b = y;
		}

		@Override
		public int compareTo(Pair o) {
			// TODO Auto-generated method stub
			return 0;
		}
	}

}