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>
#define ll long long
#define mod 1000000007
using namespace std;

ll dp[10][200001];
string s = "abcdefghijklmnopqrstuvwxyz";
ll findgcd(ll a, ll b) {
    if (b == 0) {
        return a;
    }
    return findgcd(b, a % b);
}

bool ispalindrome(string s) {
    int n = s.length();
    bool flag = true;
    for (int i = 0; i < n / 2; i++) {
        if (s[i] != s[n - 1 - i]) {
            flag = false;
            break;
        }
    }
    return flag;
}

ll factorial(ll n) {
    vector<ll> v(n + 1);
    for (ll i = 0; i <= n; i++) {
        if (i == 0 || i == 1) {
            v[i] = 1;
        }
        else {
            v[i] = (i * v[i - 1]) % mod;
        }
    }
    return v[n];
}

void calculatedp() {
    for (ll i = 0; i <= 9; i++) {
        ll temp = 10 - i;
        for (ll j = 0; j <= 200000; j++) {
            if (j < temp) {
                dp[i][j] = 1;
            }
            else if (j == temp) {
                dp[i][j] = 2;
            }
            else {
                break;
            }
        }
    }
    dp[1][10] = 2;
    for (ll i = 11; i <= 200000; i++) {
        int temp1 = i - 10;
        int temp2 = i - 9;
        dp[0][i] = (dp[0][temp1] + dp[1][temp1]) % mod;
        dp[1][i] = (dp[0][temp2] + dp[1][temp2]) % mod;
    }
    for (ll i = 2; i <= 9; i++) {
        ll temp = 10 - i;
        for (ll j = temp + 1; j <= 200000; j++) {
            dp[i][j] = (dp[0][j - temp] + dp[1][j - temp]) % mod;
        }
    }
}

void solve() {
    // ll m;
    // cin >> s;
    // cin >> m;
    // ll ans = 0;
    // for (int i = 0; i < s.length(); i++) {
    //     ans = (ans + (dp[s[i] - '0'][m])) % mod;
    // }
    // cout << ans << "\n";
    int n, k;
    cin >> n >> k;

    string ans = "";

    for (int i = 0 ; i < k ; i++) {
        ans += s[i];
        for (int j = i + 1 ; j < k ; j++) {
            ans += s[i];
            ans += s[j];
        }
    }

    if (n < ans.size()) {
        cout << ans.substr(0, n) << endl;
    }
    else {
        int j = ans.length();
        int i = 0;
        while (j < n) {
            ans += ans[i];
            i++;
            j++;
        }

        cout << ans << endl;
    }
}
int main() {
#ifndef ONLINE_JUDGE
    //for getting input from input.txt
    freopen("input.txt", "r", stdin);
    //for writing output to output.txt
    freopen("output.txt", "w", stdout);
#endif
    ios_base::sync_with_stdio(0);
    cin.tie(0);
    cout.tie(0);
    // calculatedp();
    // for (int i = 0; i <= 10; i++) {
    //     for (int j = 0; j <= 10; j++) {
    //         cout << dp[i][j] << " ";
    //     }
    //     cout << "\n";
    // }
    int t;
    t = 1;
    // cin >> t;
    while (t--) {
        solve();
    }
}