Problem: A positive integer x is called a power of two if it can be represented as x = 2^y, where y is a non-negative integer. So, the powers of two are 1, 2, 4, 8, 16, ....

You are given two positive integers n and k. Your task is to represent n as the sum of exactly k powers of two.

Input

The only line of the input contains two integers n and k (1 ≤ n ≤ 10^9, 1 ≤ k ≤ 2 ⋅ 10^5).

Output

If it is impossible to represent n as the sum of k powers of two, print NO.

Otherwise, print YES, and then print k positive integers b_1, b_2, ..., b_k such that each of b_i is a power of two, and ∑ _{i = 1}^{k} b_i = n. If there are multiple answers, you may print any of them.

Examples

Input


9 4


Output


YES
1 2 2 4 


Input


8 1


Output


YES
8 


Input


5 1


Output


NO


Input


3 7


Output


NO

Solution (in JAVA):

Solution:
import java.io.*;
import java.util.ArrayList;
import java.util.StringTokenizer;

public class C {

    public static void main(String[] args) throws IOException {
        init();
        int n = nextInt(), k = nextInt();

        ArrayList<Integer> answer = make(n, k);

        if (answer.isEmpty() || k > n) System.out.println("NO");
        else {
            System.out.println("YES");
            System.out.println(answer.toString().replace("[", "").replace(", ", " ").replace("]", ""));
        }
    }

    private static ArrayList<Integer> make(int n, int k) {
        String bin = new StringBuilder(Integer.toString(n, 2)).reverse().toString();
        int ones = 0;
        int[] pows = new int[32];
        for (int i = 0; i < bin.length(); i++) {
            if (bin.charAt(i) == '1') {
                ones++;
                pows[i]++;
            }
        }

        if (k < ones || k > n) return new ArrayList<>();
        while (ones < k) {
            for (int i = pows.length - 1; i >= 0; i--) {
                if (pows[i] > 0) {
                    pows[i]--;
                    pows[i - 1] += 2;
                    ones++;
                    break;
                }
            }
        }

        ArrayList<Integer> answer = new ArrayList<>();
        for (int i = 0; i < pows.length; i++) {
            while (pows[i] > 0) {
                answer.add((int) Math.pow(2, i));
                pows[i]--;
            }
        }

        return answer;
    }

    //Input Reader
    private static BufferedReader reader;
    private static StringTokenizer tokenizer;

    private static void init() {
        reader = new BufferedReader(new InputStreamReader(System.in));
        tokenizer = new StringTokenizer("");
    }

    private static String next() throws IOException {
        String read;
        while (!tokenizer.hasMoreTokens()) {
            read = reader.readLine();
            if (read == null || read.equals(""))
                return "-1";
            tokenizer = new StringTokenizer(read);
        }

        return tokenizer.nextToken();
    }

    private static int nextInt() throws IOException {
        return Integer.parseInt(next());
    }
}