#include <bits/stdc++.h>
using namespace std;
long long int Pow(long long int B, long long int P) {
  long long int R = 1;
  while (P > 0) {
    if (P % 2 == 1) R = (R * B);
    P /= 2;
    B = (B * B);
  }
  return R;
}
int BigMod(long long int B, long long int P, long long int M) {
  long long int R = 1;
  while (P > 0) {
    if (P % 2 == 1) {
      R = (R * B) % M;
    }
    P /= 2;
    B = (B * B) % M;
  }
  return (int)R;
}
int prime[90000];
bool flag[1010];
int sieve() {
  int i, j, total = 0, val;
  val = sqrt(1010) + 1;
  flag[0] = flag[1] = 1;
  for (i = 2; i < val; i++)
    if (!flag[i])
      for (j = i; j * i <= 1010; j++) flag[i * j] = 1;
  for (i = 2; i <= 1010; i++)
    if (!flag[i]) prime[total++] = i;
  return total;
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / (gcd(a, b)));
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
int main() {
  int i, j, n, d, mark[200];
  string str;
  memset(mark, 0, sizeof(mark));
  cin >> n >> d;
  if (n < d || (n > 1 && d == 1))
    cout << "-1\n";
  else {
    mark['a'] = 1;
    mark['b'] = 1;
    for (i = 0; i < (n - d) + 1; i++) {
      if (i % 2)
        str.push_back('b');
      else
        str.push_back('a');
    }
    if (n == 1)
      cout << str << endl;
    else {
      if (str[(int)str.size() - 1] == 'a')
        str.push_back('b');
      else
        str.push_back('a');
      int cnt = 0, last = d - 2;
      for (i = 0; i < 26; i++) {
        char ch = 'a' + i;
        if (cnt >= last) break;
        if (!mark[ch]) {
          str.push_back(ch);
          cnt++;
        }
      }
      cout << str << endl;
    }
  }
  return 0;
}

### Prompt

In cpp, your task is to solve the following problem:

Little penguin Polo adores strings. But most of all he adores strings of length n.

One day he wanted to find a string that meets the following conditions:

  1. The string consists of n lowercase English letters (that is, the string's length equals n), exactly k of these letters are distinct. 
  2. No two neighbouring letters of a string coincide; that is, if we represent a string as s = s1s2... sn, then the following inequality holds, si ≠ si + 1(1 ≤ i < n). 
  3. Among all strings that meet points 1 and 2, the required string is lexicographically smallest. 



Help him find such string or state that such string doesn't exist.

String x = x1x2... xp is lexicographically less than string y = y1y2... yq, if either p < q and x1 = y1, x2 = y2, ... , xp = yp, or there is such number r (r < p, r < q), that x1 = y1, x2 = y2, ... , xr = yr and xr + 1 < yr + 1. The characters of the strings are compared by their ASCII codes.

Input

A single line contains two positive integers n and k (1 ≤ n ≤ 106, 1 ≤ k ≤ 26) — the string's length and the number of distinct letters.

Output

In a single line print the required string. If there isn't such string, print "-1" (without the quotes).

Examples

Input

7 4


Output

ababacd


Input

4 7


Output

-1

### Response

```cpp
#include <bits/stdc++.h>
using namespace std;
long long int Pow(long long int B, long long int P) {
  long long int R = 1;
  while (P > 0) {
    if (P % 2 == 1) R = (R * B);
    P /= 2;
    B = (B * B);
  }
  return R;
}
int BigMod(long long int B, long long int P, long long int M) {
  long long int R = 1;
  while (P > 0) {
    if (P % 2 == 1) {
      R = (R * B) % M;
    }
    P /= 2;
    B = (B * B) % M;
  }
  return (int)R;
}
int prime[90000];
bool flag[1010];
int sieve() {
  int i, j, total = 0, val;
  val = sqrt(1010) + 1;
  flag[0] = flag[1] = 1;
  for (i = 2; i < val; i++)
    if (!flag[i])
      for (j = i; j * i <= 1010; j++) flag[i * j] = 1;
  for (i = 2; i <= 1010; i++)
    if (!flag[i]) prime[total++] = i;
  return total;
}
template <class T>
inline T lcm(T a, T b) {
  if (a < 0) return lcm(-a, b);
  if (b < 0) return lcm(a, -b);
  return a * (b / (gcd(a, b)));
}
template <class T>
inline T gcd(T a, T b) {
  if (a < 0) return gcd(-a, b);
  if (b < 0) return gcd(a, -b);
  return (b == 0) ? a : gcd(b, a % b);
}
int main() {
  int i, j, n, d, mark[200];
  string str;
  memset(mark, 0, sizeof(mark));
  cin >> n >> d;
  if (n < d || (n > 1 && d == 1))
    cout << "-1\n";
  else {
    mark['a'] = 1;
    mark['b'] = 1;
    for (i = 0; i < (n - d) + 1; i++) {
      if (i % 2)
        str.push_back('b');
      else
        str.push_back('a');
    }
    if (n == 1)
      cout << str << endl;
    else {
      if (str[(int)str.size() - 1] == 'a')
        str.push_back('b');
      else
        str.push_back('a');
      int cnt = 0, last = d - 2;
      for (i = 0; i < 26; i++) {
        char ch = 'a' + i;
        if (cnt >= last) break;
        if (!mark[ch]) {
          str.push_back(ch);
          cnt++;
        }
      }
      cout << str << endl;
    }
  }
  return 0;
}

```