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.util.stream.Collectors;
import java.lang.*;
import java.io.*;
 
public class Problem {
	static List<Long> ans;
	static int[] powers ;
	
	public static void main (String[] args) throws java.lang.Exception
	{
	    Scanner sc = new Scanner(System.in);
	    int n = sc.nextInt();
	    int k = sc.nextInt();
	    powers = new int[33];
	    for(int i=0;i<33;i++)powers[i]=(int)Math.pow(2, i);
	    List<Integer> temp = new ArrayList<Integer>();
	    boolean val = process(n,k,temp);
	    if(val==false || ans == null || ans.size()==0 || (k==1 && (n&(n-1))!=0))System.out.println("NO");
	    else
	    {
	    	System.out.println("YES");
	    	for(long p : ans)System.out.print(p+" ");
	    }
	}
	
	public static boolean process(int n, int k,List<Integer> temp)
	{
		String s = Integer.toBinaryString(n);
		ans = new ArrayList<Long>();
		int len = s.length();
		for(int i=len-1;i>=0;i--)
		{
			if(s.charAt(i)=='1')
			{
				ans.add((long)Math.pow(2,len-(i+1)));
			}
		}
		if(ans.size()>k)return false;
		if(ans.size()==k)return true;
		int diff = k-ans.size();
		//System.out.println(ans.toString()+" "+diff);
		while(diff > 0)
		{
			int ind=ans.size()-1;
			while(ind>=0 && ans.get(ind)==1)ind--;
			if(ind<0)return ans.size()==k;
			long val = ans.get(ind);
			//System.out.println(val);
			ans.remove(ind); 
			ans.add(val/2);
			ans.add(val/2);
			
			diff--;
		}
		return true;
	}
}