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.*;
import java.util.*;
public class Main
{
    public static void main(String args[])
    {
        FastReader input=new FastReader();
        PrintWriter out=new PrintWriter(System.out);
        int T=1;
        while(T-->0)
        {
            int n=input.nextInt();
            int k=input.nextInt();
            HashSet<Integer> arr[]=new HashSet[k];
            for(int i=0;i<k;i++)
            {
                arr[i]=new HashSet<>();
            }
            String s="";
            for(int i=0;i<(k*k)+1;i++)
            {
                if(i==0)
                {
                    s+='a';
                }
                else
                {
                    char ch=s.charAt(s.length()-1);
                    int t=(int)ch-'a';
                    int flag=0;
                    for(int j=t;j<k;j++)
                    {
                        if(!arr[t].contains(j))
                        {
                            flag=1;
                            s+=(char)(j+'a');
                            arr[t].add(j);
                            break;
                        }
                    }
                    if(flag==0)
                    {
                        for(int j=0;j<t;j++)
                        {
                            if(!arr[t].contains(j))
                            {
                                s+=(char)(j+'a');
                                arr[t].add(j);
                                break;
                            }
                        }
                    }
                }
            }
            if(n<=s.length())
            {
                out.println(s.substring(0,n));
            }
            else
            {
                n-=s.length();
                StringBuilder sb=new StringBuilder("");
                sb.append(s);
                int q=n/(s.length()-1);
                int r=n%(s.length()-1);
                for(int i=0;i<q;i++)
                {
                    sb.append(s.substring(1,s.length()));
                }
                sb.append(s.substring(1,1+r));
                out.println(sb.toString());
            }
        }
        out.close();
    }
    static class FastReader
    {
        BufferedReader br;
        StringTokenizer st;
        public 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();
        }
        int nextInt()
        {
            return Integer.parseInt(next());
        }
        long nextLong()
        {
            return Long.parseLong(next());
        }
        double nextDouble()
        {
            return Double.parseDouble(next());
        }
        String nextLine()
        {
            String str="";
            try
            {
                str=br.readLine();
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            return str;
        }
    }
}