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:
/**
 * d.cc
 * Author: Libao Jin
 * Date: 2021-04-13 17:33
 */

#include <bits/stdc++.h>

using namespace std;

#ifdef LOCAL
ifstream fin("d.in");
ofstream fout("d.out");
#define cin fin
#define cout fout
#endif

static const auto _ = []() {
  ios::sync_with_stdio(false);
  cin.tie(nullptr);
  cout.precision(10);
  cout << fixed;
  return 0;
}();

#define rep(i, s, t) for (int i = (s); i < (t); ++i)
#define per(i, s, t) for (int i = (t)-1; i < (s); --i)
#define dd(x) cout << #x << " = " << x << ", "
#define de(x) cout << #x << " = " << x << endl
#define all(x) (x).begin(), (x).end()
#define rall(x) (x).rbegin(), (x).rend()
#define sz(x) int((x).size())
#define asort(x) sort(all(x))
#define dsort(x) sort(rall(x))
#define pb push_back
#define eb emplace_back
#define mp make_pair
#define mt make_tuple
#define fi first
#define se second

typedef long long ll;
typedef long double ld;
typedef pair<int, int> pii;
typedef pair<ll, ll> pll;
typedef vector<char> vc;
typedef vector<string> vs;
typedef vector<vs> vvs;
typedef vector<int> vi;
typedef vector<vi> vvi;
typedef vector<long> vl;
typedef vector<vl> vvl;
typedef vector<ll> vll;
typedef vector<vll> vvll;

void solve(int n, int k) {
  string alpha = string("abcdefghijklmnopqrstuvwxyz").substr(0, k);
  int possible = k * k;
  string ans = "a";
  vector<vector<bool>> taken(k, vector<bool>(k, false));

  while (possible--) {
    int last = ans.back() - 'a';
    for (int i = k - 1; i >= 0; --i) {
      if (!taken[last][i]) {
        taken[last][i] = true;
        ans += char(i + 'a');
        break;
      }
    }
  }
  ans.pop_back();

  int m = n / ans.size();
  int r = n % ans.size();
  string ret;
  for (int i = 0; i < m; ++i) {
    ret += ans;
  }
  ret += ans.substr(0, r);

  cout << ret;
  cout << '\n';
}

int main(int argc, char* argv[]) {
  int n, k;
  while (cin >> n >> k) solve(n, k);
  return 0;
}