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.OutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.PrintWriter;
import java.util.Scanner;
import java.util.ArrayList;

/**
 * Built using CHelper plug-in
 * Actual solution is at the top
 *
 * @author augment
 */
public class Main {
	public static void main(String[] args) {
		InputStream inputStream = System.in;
		OutputStream outputStream = System.out;
		Scanner in = new Scanner(inputStream);
		PrintWriter out = new PrintWriter(outputStream);
		TaskC solver = new TaskC();
		solver.solve(1, in, out);
		out.close();
	}

	static class TaskC {
		static int ind = 0;

		public void solve(int testNumber, Scanner sc, PrintWriter out) {
			int n = sc.nextInt();
			int k = sc.nextInt();
			char[] digits = Integer.toBinaryString(n).toCharArray();
			int numOnes = 0;
			for (int i = 0; i < digits.length; i++) {
				numOnes += (digits[i] == '1' ? 1 : 0);
			}
			//out.println(numOnes);
			if (k > n) {
				out.println("NO");
			} else if (numOnes > 1 && k == 1) {
				out.println("NO");
			} else if (numOnes == 1 && k == 1) {
				out.println("YES\n" + n);
			} else {
				ArrayList<Integer> minSoln = new ArrayList<>();
				findMinSoln(n, minSoln, digits);
				if (minSoln.size() > k) {
					out.println("NO");
				} else {
					while (minSoln.size() < k) {
						incSoln(n, minSoln);
					}
					out.println("YES");
					StringBuilder sb = new StringBuilder();
					for (int i = 0; i < minSoln.size(); i++) {
						sb.append(minSoln.get(i) + "" + ((i < minSoln.size() - 1) ? " " : ""));
					}
					out.println(sb.toString());
				}
			}

		}

		public static void findMinSoln(int n, ArrayList<Integer> arr, char[] digits) {
			for (int i = 0; i < digits.length; i++) {
				if (digits[digits.length - 1 - i] == '1') {
					arr.add((int) Math.pow(2, i));
				}
			}
		}

		public static void incSoln(int n, ArrayList<Integer> arr) {
			for (ind = ind; arr.get(ind) <= 1; ind++) ;
			arr.set(ind, arr.get(ind) / 2);
			arr.add(ind, arr.get(ind));
		}

	}
}