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

Solution:

#include <bits/stdc++.h>
using namespace std;

#define no printf("No\n")
#define yes printf("Yes\n")
#define sz(x) (int)x.size()
#define all(x) x.begin(), x.end()
#define rall(x) x.rbegin(), x.rend()
#define ERAGE(x) x.erase(unique(all(x)), x.end())
#define out(x) cout << #x << " -> " << x << "\n"

void files()
{
    freopen("1.in", "r", stdin);
    freopen("1.out", "w", stdout);
    return;
}

typedef long long ll;
#define infi INT_MAX
#define infl LLONG_MAX
double eps = 1e-6;
double pi = acos(-1);
const int MXN = 1e5 + 5;
const long long MOD = 1e9 + 7;

int dx8[] = {0, 0, 1, 1, 1, -1, -1, -1};
int dy8[] = {1, -1, 1, -1, 0, 0, -1, 1};
int dx4[] = {1, -1, 0, 0};
int dy4[] = {0, 0, 1, -1};

long long bin(long long base, long long pow, long long m)
{
    base %= m;
    long long ans = 1;
    while (pow)
    {
        if (pow & 1)
            ans = ans * base % m;
        base = base * base % m;
        pow >>= 1;
    }
    return ans;
}

int deg[26];
string here;
int n, k;
void dfs(int v)
{
    while (deg[v] < k)
    {
        int u = deg[v]++;
        dfs(u);
        here += 'a' + u;
    }
}
void sol()
{
    cin >> n >> k;
    string s;
    dfs(0);
    cout << 'a';
    /*
    cout << here << "\n";
    for (int i = 0; i < k; ++i)
        deg[i] = 0;
    stack<int> st;
    st.push(0);
    while (!st.empty())
    {
        while (!st.empty() && deg[st.top()] >= k)
            st.pop();
        if (!st.empty())
        {
            int cur = deg[st.top()]++;
            s += (char)('a' + cur);
            if (deg[cur] < k)
                st.push(cur);
        }
    }
    s += 'a';
    reverse(all(s));
    cout << s << "\n";
    return;
    */
    for (int i = 0; i + 1 < n; ++i)
        cout << here[i % sz(here)];
    cout << "\n";
}
int main()
{
    //files();
    int tcase = 1;
    //scanf("%d", &tcase);
    cout << fixed << setprecision(6);
    while (tcase--)
    {
        sol();
    }
}