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
import java.io.*;
import java.util.*;
import java.math.*;
import java.lang.*;
import java.lang.StringBuffer;
import java.text.*; // java.text.DecimalFormat

public class Codeforces
{
  public StreamTokenizer st;
  public PrintWriter pw;
  public static final int modulo = 1000000009; 
  
  static class Point
  {
    public int x;
    public double y;
    Point(int _x, double _y)
    {
      x = _x;
      y = _y;
    }
  }
  
  void init(String in, String out) 
  {
    if (in.isEmpty())
      st = new StreamTokenizer(System.in);
    else
    {
      try
      {
        st = new StreamTokenizer(new BufferedReader(new FileReader(in)));
      }
      catch(FileNotFoundException e)
      {
        
      }
    }
    
    if (out.isEmpty())
      pw = new PrintWriter(System.out);
    else
    {
      try
      {
        pw = new PrintWriter(new FileWriter(out));
      }
      catch(IOException e)
      {
        
      }
    }
  }
  
  private void close()
  {
    pw.close();
  }
  
  private int nI()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return (int)st.nval;
  }
  
  private double nD()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return st.nval;
  }
  
  private String nS()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return st.sval;
  }
   
  private long nL()
  {
    try{
      st.nextToken();
    }
    catch(IOException e)
    {
      
    }
    return (long)st.nval;
  }
  
  public static void qSort(int[] A, int low, int high) {
    int i = low;                
    int j = high;
    int x = A[(low+high)/2];  
    do {
        while(A[i] < x) ++i;  
        while(A[j] > x) --j;  
        if(i <= j){           
            
            int temp = A[i];
            A[i] = A[j];
            A[j] = temp;
       
            i++; j--;
        }
    } while(i < j);
    if(low < j) 
      qSort(A, low, j);
    if(i < high) 
      qSort(A, i, high);    
  }
  
  
  public static void main(String[] aslkdjlkgja) throws IOException
  {
    Codeforces z = new Codeforces();
    z.init("", "");
    
    int n = z.nI();
    int k = z.nI();
    
    if (n == k  &&  n == 1)
    {
      System.out.println("a");
      return;
    }
    if (n < k || k == 1)
      System.out.println(-1);
    else
    {
      StringBuffer s = new StringBuffer();
      int dif = n - k;
      int h = k - 2;
      while (n > h)
      {
        s.append('a');
        n--;
        if (n > h)
        {
          s.append('b');
          --n;
        }
      }
      char c = 'c';
      for (int i = 0 ; i < h; ++i)
      {
        s.append(c);
        ++c;
      }
      System.out.println(s.toString());
    }
    
    z.close();
  }
   
  
  
  
}