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.*;
 
public class A {	
	
	public static void main(String[] args) throws IOException{	
		
		FastScanner fs = new FastScanner();
		int n = fs.nextInt();
		int k = fs.nextInt();
		if(k>n || (k==1 && n>1))System.out.println(-1);
		else {
			StringBuffer ans = new StringBuffer();
			if(k==1) {
				for(int i=0 ; i<n ; i++) ans.append('a');
			}else {
				for(int i=0 ; i<n-k+2 ; i++) {
					if(i%2==0) ans.append('a');
					else ans.append('b');
				}
				for(int i=3 ; i<=k ; i++) {
					ans.append((char)(96+i));
				}
			}
			System.out.println(ans);
		}
	}
	
	
	public static int sod(int n) {
		int ans = 0;
		for(char c:String.valueOf(n).toCharArray()) {
			ans += Character.getNumericValue(c);
		}
		return ans;
	}
	
	public static void print(int[] a) {
		for(int e:a) {
			System.out.print(e + " ");
		}
		System.out.println();
	}
	
	public static long gcd(long a , long b) {
		if(a==0) return b;
		else return gcd(b%a,a);
	}
	
	static void sort(int[] a) {
		ArrayList<Integer> l=new ArrayList<>();
		for (int i:a) l.add(i);
		Collections.sort(l);
		for (int i=0; i<a.length; i++) a[i]=l.get(i);
	}
	
	static class FastScanner {
		BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st=new StringTokenizer("");
		String next() {
			while (!st.hasMoreTokens())
				try {
					st=new StringTokenizer(br.readLine());
				} catch (IOException e) {
					e.printStackTrace();
				}
			return st.nextToken();
		}
		
		int nextInt() {
			return Integer.parseInt(next());
		}
		int[] readArray(int n) {
			int[] a=new int[n];
			for (int i=0; i<n; i++) a[i]=nextInt();
			return a;
		}
		String[] readStringArray(int n) {
			String[] a=new String[n];
			for (int i=0; i<n; i++) a[i]=next();
			return a;
		}
		long nextLong() {
			return Long.parseLong(next());
		}
	}
	
	static class Pair implements Comparable<Pair> {
	       
        int x;
        int y;
    
        public Pair(int x, int y) {
            this.x = x;
            this.y = y;
        }
    
        @Override
        public int hashCode() {
            return this.x ^ this.y;
        }
    
        @Override
        public boolean equals(Object obj) {
            if (this == obj)
                return true;
            if (obj == null)
                return false;
            if (getClass() != obj.getClass())
                return false;
            Pair other = (Pair) obj;
            if (x != other.x)
                return false;
            if (y != other.y)
                return false;
            return true;
        }
        @Override
        public int compareTo(Pair o) {
			if(x!=o.x)return x-o.x;
            return y-o.y;
        }
	}
	
}