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 com.sun.org.apache.bcel.internal.generic.RETURN;
import javafx.collections.transformation.SortedList;

import java.io.*;
import java.util.*;

import static java.util.Arrays.fill;

public class Main {
    public static void main(String[] args)  {
       __SolutionBase begin = new __SolutionBase();
       begin.Solve();
    }

}
class __SolutionBase {
    public void Solve(){
        init();
        long n = readInt();
        int k = readInt();
        if (n < k){
            System.out.println("NO");
            return;
        }
        if (n == k){
            System.out.println("YES");
            for (long i = 0;i < n;i++) System.out.println(1 + " ");
            return;
        }
        int[] numbers = new int[k];fill(numbers,1);

        long summ = k;
        for (int i = k-1;i >= 0;i--)
            while (summ + numbers[i] <= n){
                summ += numbers[i];
                numbers[i] *= 2;
            }


        if (summ != n) {
            System.out.print("NO");
            return;
        }

        System.out.println("YES");
        for (int elem:numbers)
            System.out.print(elem + " ");
    }

    /**
     * readLong, readDouble and other are similar
     * @return int type from input
     */
    private int readInt() {
        return Integer.parseInt(readString());
    }

    /**
     * Tokens are separated by space or endExclusive of line
     * @return non-empty string token from input (or null if there is no any token)
     */
    private String readString() {
        while (!tok.hasMoreTokens()) {
            String nextLine = readLine();
            if (null == nextLine) return null;
            tok = new StringTokenizer(nextLine);
        }

        return tok.nextToken();
    }

    /**
     * @return whole line from input
     */
    private String readLine() {
        try {
            return in.readLine();
        } catch (IOException e) {
            throw new RuntimeException(e);
        }
    }

    private BufferedReader in;
    private PrintWriter out;
    private StringTokenizer tok = new StringTokenizer(" ");

    /**
     * For local testing I use pair 'input.txt'/'output.txt' in the project root
     */
    private void init() {
        try {
            in = new BufferedReader(new FileReader("input.txt"));
            out = new PrintWriter("output.txt");
        } catch (FileNotFoundException e) {
            in = new BufferedReader(new InputStreamReader(System.in));
            out = new PrintWriter(System.out);
        }
    }
}