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. 1.  No two neighbouring letters of a string coincide; that is, if we represent a string as *s* = *s*<sub class="lower-index">1</sub>*s*<sub class="lower-index">2</sub>... *s*<sub class="lower-index">*n*</sub>, then the following inequality holds, *s*<sub class="lower-index">*i*</sub> ≠ *s*<sub class="lower-index">*i* + 1</sub>(1 ≤ *i* &lt; *n*). 1.  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* = *x*<sub class="lower-index">1</sub>*x*<sub class="lower-index">2</sub>... *x*<sub class="lower-index">*p*</sub> is lexicographically less than string *y* = *y*<sub class="lower-index">1</sub>*y*<sub class="lower-index">2</sub>... *y*<sub class="lower-index">*q*</sub>, if either *p* &lt; *q* and *x*<sub class="lower-index">1</sub> = *y*<sub class="lower-index">1</sub>, *x*<sub class="lower-index">2</sub> = *y*<sub class="lower-index">2</sub>, ... , *x*<sub class="lower-index">*p*</sub> = *y*<sub class="lower-index">*p*</sub>, or there is such number *r* (*r* &lt; *p*, *r* &lt; *q*), that *x*<sub class="lower-index">1</sub> = *y*<sub class="lower-index">1</sub>, *x*<sub class="lower-index">2</sub> = *y*<sub class="lower-index">2</sub>, ... , *x*<sub class="lower-index">*r*</sub> = *y*<sub class="lower-index">*r*</sub> and *x*<sub class="lower-index">*r* + 1</sub> &lt; *y*<sub class="lower-index">*r* + 1</sub>. The characters of the strings are compared by their ASCII codes.
A single line contains two positive integers *n* and *k* (1 ≤ *n* ≤ 10<sup class="upper-index">6</sup>, 1 ≤ *k* ≤ 26) — the string's length and the number of distinct letters.
import sys
input = sys.stdin.readline
from collections import defaultdict, deque
p = print
r = range
def I(): return int(input())
def II(): return list(map(int, input().split()))
def S(): return input()[:-1]
def M(n): return [list(map(int, input().split())) for ___ in r(n)]
def pb(b): print('YES' if b else 'NO')
def INF(): return float('inf')
# -----------------------------------------------------------------------------------------------------
#
# 　　　　　　　　　　　 ∧＿∧
# 　　　　　 ∧＿∧ 　 （´<_｀ ）　     Welcome to My Coding Space !
# 　　　　 （ ´_ゝ`）　/　 ⌒i        Free Hong Kong !
# 　　　　／　　　＼　 　  |　|       Free Tibet !
# 　　　 /　　 /￣￣￣￣/　|　 |
# 　 ＿_(__ﾆつ/　    ＿/ .| .|＿＿＿＿
# 　 　　　＼/＿＿＿＿/　（u　⊃
#
#     再帰関数ですか？　SYS!!!!
#     BINARY SEARCH ?
# -----------------------------------------------------------------------------------------------------
n, k = II()
if k == 1:
    if n>1:
        p(-1)
        exit(0)
if k>n:
    p(-1)
    exit(0)
candi = [chr(ord("c") + i) for i in r(k-2)]
res = []
t = "a"
while len(res) < n:
    res.append(t)
    if t == "a":
        t = "b"
    else:
        t = "a"
for i in r(len(candi)):
    res[n-i-1] = candi[-i-1]
p("".join(res))