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:
//Praise our lord and saviour qlf9
//DecimalFormat f = new DecimalFormat("##.00");

import java.util.*;
import java.io.*;
import java.math.*;
import java.text.*;
public class D{
public static void main(String[] omkar) throws Exception
{
   BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
   StringTokenizer st = new StringTokenizer(in.readLine());
   StringBuilder sb = new StringBuilder();
   int n = Integer.parseInt(st.nextToken());
   int k = Integer.parseInt(st.nextToken());
   construct(n, k, sb);
   System.out.println(sb);
        }
 public static void construct(int n, int k, StringBuilder sb)
 {
     char a = 'a';
     while(true)
     {
         sb.append((char)(a+k-1));
         if(sb.length() >= n)
         {
          return;
         }
         for(int i = k-1; i >= 1; i--)
         {
            sb.append((char)(a+k-1));
            if(sb.length() >= n)
            {
             return;
            }
            construct2(n, i, sb);
            if(sb.length() >= n)
            {
             return;
            }
         }
     }
 }
 public static void construct2(int n, int k, StringBuilder sb)
 {
     if(sb.length() >= n)
     {
         return;
     }
     char a = 'a';
     for(int i = k-1; i >= 0; i--)
     {
         sb.append((char)(a+i));
         if(sb.length() >= n)
         {
             return;
         }
         sb.append((char)(a+k-1));
         if(sb.length() >= n)
         {
             return;
         }
     }
 }
 public static int[] readArr(int N, BufferedReader in, StringTokenizer st) throws Exception
      {
         int[] arr = new int[N];
         st = new StringTokenizer(in.readLine());
         for(int i=0; i < N; i++)
            arr[i] = Integer.parseInt(st.nextToken());
         return arr;
      }


}