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 sz(x) (int)(x).size()
#define all(x) (x).begin(), (x).end()
using namespace std;

typedef long long ll;
typedef unsigned long long llu;
typedef pair<int, int> pii;
typedef pair<double, double> pdd;
typedef pair<int, pii> piii;
typedef pair<ll, ll> pll;
typedef pair<ll, int> pli;
typedef pair<int, ll> pil;
typedef pair<string, int> psi;
typedef pair<char, int> pci;
typedef pair<int, char> pic;
const int MOD = 1e9 + 7;
const long double PI = 3.141592653589793238462643383279502884197;

ll fac[1] = {1}, inv[1] = {1};
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
ll mp(ll a,ll b){ll ret=1;while(b){if(b&1)ret=ret*a%MOD;a=a*a%MOD;b>>=1;}return ret;}
ll cmb(ll r, ll c) {return (c>r||c<0) ? 0:fac[r] * inv[c] % MOD * inv[r - c] % MOD;}

int mat[26][26];
vector<int> v[26];
vector<int> ans;
int rec[26];

void go(int o) {
    rec[o]++;
    for (int &i = rec[o]; i < sz(v[o]); i++) {
        if (mat[o][v[o][i]]) continue;
        mat[o][v[o][i]]++; // 간선 방문체크
        go(v[o][i]);
    }
    ans.push_back(o);
}
int main() {
    memset(rec, -1, sizeof(rec));

    int n, k;
    scanf("%d %d", &n, &k);

    for (int i = 0; i < k; i++)
        for (int j = 0; j < k; j++)
            v[i].push_back(j);

    if (k == 1) {
        for (int i = 0; i < n; i++) printf("a");
        return 0;
    }

    go(0);

    int flag = 0;
    while (n) {
        for (int i : ans) {
            printf("%c", i + 'a');
            if (--n == 0) break;
        }

        if (flag == 0) {
            flag = 1;
            ans.erase(ans.begin());
        }
    }
}

// author: rdd6584