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.BufferedWriter;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.math.BigDecimal;
import java.math.RoundingMode;
import java.util.*;

public class Solution {
  static BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  static BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
  public static int[] readIntArray(int n) throws Exception {
    int[] nums = new int[n];
    var lines = br.readLine().split(" ");
    for(int i = 0; i < n; i ++)
      nums[i] = Integer.parseInt(lines[i]);
    return nums;
  }
  public static long[] readLongArray(int n) throws Exception {
    long[] nums = new long[n];
    var lines = br.readLine().split(" ");
    for(int i = 0; i < n; i ++)
      nums[i] = Long.parseLong(lines[i]);
    return nums;
  }
  public static String[] readStringArray(int n) throws Exception {
    String[] nums = new String[n];
    for(int i = 0; i < n; i ++)
      nums[i] = br.readLine();
    return nums;
  }
  public static void printArray(int[] nums) throws Exception {
    for(var num : nums) {
      bw.write(num + " ");
    }
    bw.write("\n");
  }
  public static void printList(List<Integer> nums) throws Exception {
    for(var num : nums) {
      bw.write(num + " ");
    }
    bw.write("\n");
  }
  public static void main(String[] args) throws Exception {
    //int testCases = Integer.parseInt(br.readLine());
    int testCases = 1;
    for(int iter = 1; iter <= testCases; iter ++) {
      var input = readIntArray(2);
      bw.write(solve(input[0], input[1]) + "\n");
    }
    bw.flush();
    bw.close();
    br.close();
  }
  private static String solve(int n, int k) {
    int[][] counts = new int[k][k];
    StringBuilder builder = new StringBuilder();
    dfs(builder.append("a"), counts, n, k);
    return builder.toString();
  }
  private static void dfs(StringBuilder builder, int[][] counts, int n, int k) {
    if(builder.length() == n) return;
    var ch = builder.charAt(builder.length() - 1);
    int minFreq = Integer.MAX_VALUE;
    int minIndex = -1;
    for(int i = 0; i < k; i ++) {
      int freq = counts[ch - 'a'][i];
      if(freq <= minFreq) {
        minFreq = freq;
        minIndex = i;
      }
    }
    builder.append((char)('a' + minIndex));
    counts[ch - 'a'][minIndex] ++;
    dfs(builder, counts, n, k);
  }

}