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
#include <bits/stdc++.h>
using namespace std;
inline void inpint(int &n) {
  n = 0;
  register int ch = getchar_unlocked();
  bool sign = 0;
  while (ch < 48 || ch > 57) {
    if (ch == '-') sign = 1;
    ch = getchar_unlocked();
  }
  while (ch >= 48 && ch <= 57) {
    n = (n << 3) + (n << 1) + ch - 48, ch = getchar_unlocked();
  }
  if (sign) n = -n;
}
inline int sqr(int x) { return x * x; }
inline int cube(int x) { return x * x * x; }
inline long long sqrLL(long long x) { return x * x; }
inline long long cubeLL(long long x) { return x * x * x; }
const long long LLINF = 9223372036854775807LL;
const long long LLINF17 = 100000000000000000LL;
const int INF = 2147483647;
const int INF9 = 1000000000;
const int MOD = 1000000007;
const double eps = 1e-7;
const double PI = acos(-1.0);
int dr[] = {1, 0, -1, 0, -1, 1, 1, -1};
int dc[] = {0, -1, 0, 1, 1, 1, -1, -1};
int n, k;
int main() {
  cin >> n >> k;
  if (n < k)
    cout << -1 << endl;
  else if (n == k) {
    for (int(i) = (0); (i) < (k); (i)++) cout << (char)(i + 'a');
    cout << endl;
  } else {
    string str = "";
    for (int(i) = (1); (i) <= (n - k + 2); (i)++) {
      if (i & 1)
        str += "a";
      else
        str += "b";
    }
    int it = 2;
    for (int(i) = (n - k + 3); (i) <= (n); (i)++) {
      str.push_back((char)('a' + it));
      it++;
    }
    set<char> st;
    for (int(i) = (0); (i) < ((int)(str.length())); (i)++) {
      st.insert(str[i]);
    }
    if ((int)(st.size()) != k)
      cout << -1 << endl;
    else
      cout << str << endl;
  }
  return 0;
}
