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.util.*;
import java.io.*;

public class AiseHi {
	static class FastReader
	{
	BufferedReader br;
	StringTokenizer st;

	public FastReader()
	{
	br = new BufferedReader(new
	InputStreamReader(System.in));
	}

	String next()
	{
	while (st == null || !st.hasMoreElements())
	{
	try
	{
	st = new StringTokenizer(br.readLine());
	}
	catch (IOException e)
	{
	e.printStackTrace();
	}
	}
	return st.nextToken();
	}

	int nextInt()
	{
	return Integer.parseInt(next());
	}

	long nextLong()
	{
	return Long.parseLong(next());
	}

	double nextDouble()
	{
	return Double.parseDouble(next());
	}

	String nextLine()
	{
	String str = "";
	try
	{
	str = br.readLine();
	}
	catch (IOException e)
	{
	e.printStackTrace();
	}
	return str;
	}
	}
	static int m = (int)(1e9+9);
	static long mod(long x) {
		return ((x%m + m)%m);
	}
	static long add(long a,long b) {
		return mod(mod(a)+mod(b));
	}
	static long mul(long a,long b) {
		return mod(mod(a) * mod(b));
	}
	
	public static void main (String[] args) {
		FastReader sc = new FastReader();
		int n = sc.nextInt();
		int k = sc.nextInt();
		
		Map<Integer,Integer> h = new HashMap<>();
		Queue<Integer> q = new LinkedList<>();
		int num = n;
		
//		for(int i=0;i<31;i++) {
//			if((n&(1<<i))!=0) {
//				h.put(1<<i,h.getOrDefault(1<<i, 0)+1);
//				if(i>0) q.add(1<<i);
//			}
//		}
		while(num!=0) {
			int x = (int) (Math.log(num)/Math.log(2));
			num-= (int)(Math.pow(2,x));
			if(x>0) q.add((int) Math.pow(2, x));
			h.put((int)Math.pow(2, x),h.getOrDefault((int)Math.pow(2, x), 0)+1);
		}
		if(h.size()>k) {
			System.out.println("NO");
			return;
		}
		int cnt = h.size();
		while(cnt<k && !q.isEmpty()) {
			int temp = q.poll();
			if(h.get(temp)==1) h.remove(temp);
			else h.put(temp,h.get(temp)-1);
			h.put(temp/2, h.getOrDefault(temp/2,0)+2);
			if(temp/2>1) {
				q.add(temp/2);
				q.add(temp/2);
			}
			cnt++;
		}
		if(cnt<k)
			System.out.println("NO");
		else {
			System.out.println("YES");
			for(int x : h.keySet()) {
				for(int i=0;i<h.get(x);i++)
					System.out.print(x+" ");
			}
			System.out.println();
		}
	}
	static int gcd(int val, int g) {
		if(g==0) return val;
		
		return gcd(g,val%g);
	}
}