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.io.PrintWriter;
import java.util.StringTokenizer;

public class d {
	public static void main(String[] args) {
		FastScanner scan=new FastScanner();
		PrintWriter out=new PrintWriter(System.out);
		
		int n=scan.nextInt(), k=scan.nextInt();
		res=new StringBuilder();
		res.append("a");
		res.append("a");
		dup=new boolean[k];
		dup[0]=true;
		gen(0,new boolean[k]);
		res.deleteCharAt(res.toString().length()-1);
//		System.out.println(res);
		while(n-res.length()>=0) {
			n-=res.length();
			out.print(res);
		}
		for(int i=0;i<n;i++) out.print(res.toString().charAt(i));
		out.println();
		out.close();
	}
	public static void gen(int at, boolean[] v) {
		int nxt=-1;
		v[at]=true;
		
		for(int i=0;i<v.length;i++) {
			if(!v[i]) {
				if(nxt!=-1) {
					res.append((char)('a'+at));
					if(!dup[at]) {
						dup[at]=true;
						res.append((char)('a'+at));
					}
				}
				res.append((char)('a'+i));
				if(!dup[i]) {
					dup[i]=true;
					res.append((char)('a'+i));
				}
				nxt=i;
			}
		}
		if(nxt==-1) return;
		gen(nxt,v);
		res.append((char)('a'+at));
	}
	static boolean[] dup;
	static StringBuilder res;
	static class FastScanner {
		BufferedReader br;
		StringTokenizer st;

		public FastScanner() {
			try	{
				br = new BufferedReader(new InputStreamReader(System.in));
				st = new StringTokenizer(br.readLine());
			} catch (Exception e){e.printStackTrace();}
		}

		public String next() {
			if (st.hasMoreTokens())	return st.nextToken();
			try {st = new StringTokenizer(br.readLine());}
			catch (Exception 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 String nextLine() {
			String line = "";
			if(st.hasMoreTokens()) line = st.nextToken();
			else try {return br.readLine();}catch(IOException e){e.printStackTrace();}
			while(st.hasMoreTokens()) line += " "+st.nextToken();
			return line;
		}
	}
}