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 <algorithm>
#include <vector> 
#include <bits/stdc++.h>
#include <string.h>
#define pb push_back
#define mp make_pair
#define endl "\n"
#define F first
#define S second
#define s(x) set<x>
#define a(x, n) array<x, n>
#define fi(s) for(auto itr = s.begin(); itr != s.end(); itr++)
#define ri(s) for(auto itr = s.rbegin(); itr != s.rend(); itr++)
typedef  long long int ll ;
#define sz(a) (ll)a.size()
using namespace std;
inline void io(){
#ifndef ONLINE_JUDGE
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif
}
const ll maxsize = 2e5 + 5, MOD = 1e9 + 7;
const int N = 1e9+7 ;
const int fsz = 2e5 + 1 ;
// *********nCr*********  
/*vector<ll> fact(fsz) ;
ll floorSqrt(ll x)
{
    if (x == 0 || x == 1)
    return x;
    ll i = 1, result = 1;
    while (result <= x)
    {
      i++;
      result = i * i;
    }
    return i - 1;
}
 
ll power(ll a,ll b)
{
    ll k=1;
    for(;b;b/=2,a=a*a%MOD)
        if(b%2==1)
            k=k*a%MOD;
    return k%MOD;
} 

void pre() {
    fact[0] = 1;
    for(ll i = 1; i < fsz; i++) {
        fact[i] = fact[i - 1] * i % MOD;
    }
}
 
ll ncr(ll n, ll r) {
    if(n < r) return 0;
    ll p = fact[n];
    ll q = fact[r] * fact[n - r] % MOD;
    p = p * power(q, MOD - 2 ) % MOD;
    return p;
}*/
ll two[10], three[10];
ll binpow(ll a, ll b) {
    if (b == 0)
        return 1;
    ll res = binpow(a, b / 2);
    if (b % 2)
        return res * res * a;
    else
        return res * res;
}
void pre(){
    two[0] = 2, three[0] = 3;
    for(int i = 1; i < 10; i++){
        two[i] = two[i - 1], three[i] = three[i - 1];
        while(two[i]/binpow(10, i) == 0){
            two[i] *= 2; 
        }
        while(three[i]/binpow(10, i) == 0){
            three[i] *= 3; 
        }
    }
}
int main(){
    //io();
    ios_base::sync_with_stdio(false);
    cin.tie();
    cout.tie();
    cout << fixed << setprecision(9);
    ll n, t, e = 0, x = 0, y = 1, p, q, r;
    cin>>t>>q;
    char c = 'a';
    string a, s, re;
    for(int k = 0; k < q; k++){
        a.pb(c);
        c++;
    }
    for(int i = 0; i < q; i++){
        for(int j = i; j < q; j++){
            s.pb(a[j]);
            if(j != q - 1)
                s.pb(a[i]);
        }
        if(sz(s) >= t){
            x = 1;
            break;
        }
    }
    if(x == 0){
        while(sz(s) < t){
            s = s + s;
        }
    }
    for(int i = 0; i < t; i++){
        cout<<s[i];
    }
    return 0;
}