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:
// DiceRolling. CodeForces Round #1096 B done
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.List;

public class  PowersOfTwo {

	int n,k;
	boolean canDo;
	List<Integer> parts = new ArrayList<>();

	private void readData(BufferedReader bin) throws IOException {
		String sss = bin.readLine();
		String[] ss = sss.split(" ");
		n = Integer.parseInt(ss[0]);
		k = Integer.parseInt(ss[1]);
	}
	
	void printRes() {
		System.out.println(canDo ? "YES" : "NO");
		if (canDo) {
			for (int i=0; i<parts.size(); i++) {
				System.out.print(parts.get(i) + " ");
			}
			System.out.println();
		}
	}
	
	int countBits(int n) {
		int nb=0;
		while (n>0) {
			if (n%2==1) {
				nb++;
			}
			n = n/2;
		}
		return nb;
	}
	
	List<Integer> toPowers(long n) {
		List<Integer> lp = new ArrayList<>();
		long p2 = 1;
		for (int i=0; i<32; i++) {
			if ((n & p2) != 0) {
				lp.add((int)p2);				
			}
			p2 *= 2;
		}
		return lp;
	}
	
	void addAll(int p2) {
		for (int i=0; i<p2; i++) {
			parts.add(1);
		}
	}
	
	void addNeeded(int p2, int kn) {
		if (kn <= 0) {
			throw new IllegalStateException("Illegal kn = " + kn);
		} else if (kn == 1) {
			parts.add(p2);
		} else if (kn > p2) {
			throw new IllegalStateException("Illegal kn= " + kn + " > n= " + n);		
		} else if (kn == n) {
			addAll(p2);
		} else {
			int p22 = p2/2;
			if (p22+1 <= kn) {
				addAll(p22);
				addNeeded(p22, kn-p22);
			} else {
				parts.add(p22);
				addNeeded(p22, kn-1);				
			}
		}
	}	
	
	private void calculate() {
		if (n<k || k < countBits(n)) {
			canDo = false;
			return;
		}
		canDo = true;
		List<Integer> pwa = toPowers(n);
		for (int i=0; i<pwa.size(); i++) {
			int p2 = pwa.get(i);
			if (k > pwa.size()-i) {
				int kn = k - (pwa.size() - i-1);				
				if (kn > p2) {
					kn = p2;
				}
				addNeeded(p2, kn);
				k -= kn;
			} else {
				parts.add(p2);
				k--;
			}
		}		
	}

	public static void main(String[] args) throws IOException {
		// BufferedReader bin = new BufferedReader(new FileReader("cactus.in"));
		BufferedReader bin = new BufferedReader(new InputStreamReader(System.in));
		PowersOfTwo l = new PowersOfTwo();
		l.readData(bin);
		l.calculate();
		l.printRes();
	}
}