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 PYTHON3):

Solution:
import io
import os

from collections import Counter, defaultdict, deque


def getCost(s):
    N = len(s)
    cost = 0
    for i in range(N - 1):
        for j in range(i + 1, N - 1):
            if s[i] == s[j] and s[i + 1] == s[j + 1]:
                cost += 1
    return cost


def solveCost(N, K):
    import itertools

    costToStr = defaultdict(list)
    for s in itertools.product(*[range(0, K) for i in range(N)]):
        cost = getCost(s)
        costToStr[cost].append(s)
    best = min(costToStr.keys())
    print(numToStr(costToStr[best][0]))
    return best


def numToStr(arr):
    ordA = ord("a")
    return "".join(chr(ordA + x) for x in arr)


def solve(N, K):
    rows = []
    for i in range(K):
        row = []
        for j in range(K):
            if j != i and j < i:
                continue
            row.append(j)
            row.append(i)
        rows.append(row)
    s = rows[0]
    for i in range(1, K):
        index = s.index(i)
        s[index : index + 1] = rows[i]
    freq = Counter((x, y) for x, y in zip(s, s[1:]))
    assert all(v == 1 for v in freq.values())
    assert len(freq) == K * K
    template = numToStr(s)
    ans = [template[:]]
    l = len(ans[0])
    while l < N:
        ans.append(template[1:])
        l += len(template) - 1
    assert l >= N
    ans = "".join(ans)
    ans = ans[:N]
    assert len(ans) == N
    return ans


DEBUG = False
if DEBUG:
    for N in range(1, 100):
        for K in range(1, 4):
            ans1 = solveCost(N, K)
            ans = solve(N, K)
            assert len(ans) == N
            print((N, K), ans1, ans, getCost(ans))
            assert ans1 == getCost(ans)


if __name__ == "__main__":
    input = io.BytesIO(os.read(0, os.fstat(0).st_size)).readline

    TC = 1  # int(input())
    for tc in range(1, TC + 1):
        N, K = [int(x) for x in input().split()]
        ans = solve(N, K)
        print(ans)