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:
// g++ -std=c++17 -O2 -Wall -Wextra -pedantic -Wshadow -Wformat=2 -Wfloat-equal -Wcast-qual -Wcast-align -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -fsanitize=address -fsanitize=undefined -fstack-protector a.cpp
// GET RID OF WARNINGS
#include <bits/stdc++.h>
#define for0(i, n) for (ll i = 0; i < (n); ++i)
#define for1(i, n) for (ll i = 1; i < (n); ++i)
#define for2(i, n) for (ll i = 2; i < (n); ++i)
#define forx(i, a, b) for (ll i = (a); i < (b); ++i)
#define forr(i, a, b) for (ll i = (a); i >= (b); --i)
#define ll long long
#define mp make_pair
#define pb push_back
#define fi first
#define se second
#define all(a) a.begin(), a.end()
#define vsum(a) accumulate(a.begin(), a.end(), 0LL)
#define vmin(a) *min_element(a.begin(), a.end())
#define vmax(a) *max_element(a.begin(), a.end())
#define vcnt(a, b) count(a.begin(), a.end(), b)
#define it2idx(S57, it57) (ll) distance(S57.begin(), it57)
#define addm(a, b) a = (a + b) % MOD;
#define scf(a) scanf("%lld", &a)
#define scf2(a, b) scanf("%lld %lld", &a, &b)
#define scf3(a, b, c) scanf("%lld %lld %lld", &a, &b, &c)
#define scv(A, n)                     \
  for (int i57 = 0; i57 < n; ++i57) { \
    ll a57;                           \
    scanf("%lld", &a57);              \
    A.push_back(a57);                 \
  }
#define prf(a) printf("%lld\n", a)
#define prfu(a) printf("%lu\n", a)
#define prf2(a, b) printf("%lld %lld\n", a, b)
#define prf3(a, b, c) printf("%lld %lld %lld\n", a, b, c)
#define prv(A)                                     \
  {                                                \
    for (int i57 = 0; i57 < (ll)A.size(); ++i57) { \
      printf("%lld ", A[i57]);                     \
    }                                              \
    puts("");                                      \
  }
#define prs(S)              \
  {                         \
    for (auto s57 : S) {    \
      printf("%lld ", s57); \
    }                       \
    puts("");               \
  }
#define prm(M)                         \
  {                                    \
    for (auto [k57, v57] : M) {        \
      printf("%lld %lld\n", k57, v57); \
    }                                  \
    puts("");                          \
  }
#define intersect(a, b, c) set_intersection(all(a), all(b), inserter(c, c.begin()));
using namespace std;
using mll = map<ll, ll>;
using pll = pair<ll, ll>;
using lll = pair<ll, pll>;
using qll = queue<ll>;
using sll = set<ll>;
using vll = vector<ll>;
using vvll = vector<vector<ll>>;
using vvvll = vector<vector<vector<ll>>>;
using minpq = priority_queue<ll, vll, greater<ll>>;
#define error(args...)                       \
  {                                          \
    string _s = #args;                       \
    replace(_s.begin(), _s.end(), ',', ' '); \
    stringstream _ss(_s);                    \
    istream_iterator<string> _it(_ss);       \
    err(_it, args);                          \
  }
void err(istream_iterator<string> it) {
}
template <typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
  cerr << *it << " = " << a << endl;
  err(++it, args...);
}

// const int MAXN = -1;
// const int MAXM = -1;
// const int MININT = -2'147;483'648;
// const int MAXINT = 2'147'483'647;
// const ll MINLL = -9'223'372'036'854'775'807;
// const ll MAXLL = 9'223'372'036'854'775'807;
// const ll MOD = 1'000'000'007; // MOD OF NEGATIVE IS NEGATIVE, -7 % 3 = -1
// const ll INF = -1;
// const ll SQRTMAX = 31624; // sqrt(10^9) = 31,622.7766016838
// const double PI = 3.14159265358979323846;
const string ALPHABET = "abcdefghijklmnopqrstuvwxyz";

int main() {
  ll n, k;
  scf2(n, k);
  vll M(26), A = {0};
  for1(i, n) {
    ll l = M[A.back()];
    ++M[A.back()];
    A.pb(l);
    while (M[l] < k and M[M[l]] >= k) ++M[l];
    if (M[l] >= k) break;
  }
  for0(i, n) printf("%c", ALPHABET[A[i % A.size()]]);
  puts("");
}