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

public class Rextester {
    static final FS sc          = new FS();
    static final PrintWriter pw = new PrintWriter(System.out);
    static final Util u         = new Util();
    
    public static void main(String[] args) {
        int testCases = 1; // sc.nextInt();
        while(testCases-- > 0) {
            int n = sc.nextInt(), m = sc.nextInt();
            char[] alphabets = new char[m];
            char start = 'a';
            
            for(int i = 0; i<m; i++) alphabets[i] = (char)(start+i);
            
            // pw.println(Arrays.toString(alphabets));
            
            StringBuilder ans = new StringBuilder();
            for(int i = 0; i<m; i++) {
                ans.append(alphabets[i]);
                for(int j = i+1; j<m; j++) {
                    ans.append(alphabets[i]);
                    ans.append(alphabets[j]);
                }
            }
            char[] a = ans.toString().toCharArray();
            
            int itr = ans.length();
            StringBuilder Ans = new StringBuilder();
            for(int i = 0; i<n; i++) {
                Ans.append(a[i%itr]);
            }
            pw.println(Ans);
        }
        pw.flush();
    }
    
    
    
    
    //------------------------------Utility-Classes----------------------------//
    static class FS {
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        StringTokenizer st = new StringTokenizer("");
        String next() {
            while(!st.hasMoreElements()) {
                try {
                    st = new StringTokenizer(br.readLine());
                } catch(Exception e) {}
            }
            return st.nextToken();
        }
        int nextInt() {
            return Integer.parseInt(next());
        }
        long nextLong() {
            return Long.parseLong(next());
        }
    }
    static class Util {
        
        void sc1D(int[] a) {
            for(int i = 0; i<a.length; i++)
                    a[i] = sc.nextInt();
        }

        void sc2D(int[][] a) {
            for(int i = 0; i<a.length; i++)
                for(int j = 0; j<a[0].length; j++)
                        a[i][j] = sc.nextInt();
        }
        
        int gcd(int number1, int number2) {
            if (number2 == 0)
                return number1;
            return gcd(number2, number1 % number2);
        }
        
    }
}