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
/*
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
*/
#include<bits/stdc++.h>
#define ALL(x) (x).begin(),(x).end()
#define ll long long
#define db double
#define ull unsigned long long
#define pii_ pair<int,int>
#define mp_ make_pair
#define pb push_back
#define fi first
#define se second
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define per(i,a,b) for(int i=(a);i>=(b);i--)
#define show1(a) cout<<#a<<" = "<<a<<endl
#define show2(a,b) cout<<#a<<" = "<<a<<"; "<<#b<<" = "<<b<<endl
using namespace std;
const ll INF = 1LL<<60;
const int inf = 1<<30;
const int maxn = 2e5+5;
inline void fastio() {ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);}
vector<char> a[26], len[26];
void init()
{
    rep(i,0,25){
        a[i].pb('a');
        rep(j,1,i){
            a[i].pb('a'+0);
            a[i].pb('a'+j);
        }
    }
}
int main()
{
    fastio();
    init();
    int n,k; cin >> n >> k;
    vector<int> g;
    g.pb(2*k-1);
    per(i,k-1,1){
        g.pb(2*i-1+g.back());
    }
    int sum = g.back();
    rep(i,0,n-1){
        int pos = lower_bound(ALL(g),i%sum+1) - g.begin();
        int now = i%sum+1;
        if(pos >= 1) now -= g[pos-1]; //show2(pos, now-1);
        putchar(a[k-pos-1][now-1] + pos);
    }
    return 0;
}
