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.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.io.Writer;
import java.math.BigInteger;
import java.util.Scanner;
import java.util.StringTokenizer;
 
public class temp {
	
    void solve() throws IOException
    {
       FastReader sc = new FastReader();
       int n = sc.nextInt();
       int k = sc.nextInt();
       
       Queue<Integer> q = new LinkedList<>();
       int p = 1,c = 0,t=n;
       
       while(n!=0)
       {
    	   int x = n%2;
    	   
    	   if(x==1)
    	   {
    		   q.add(p);
    		   c++;
    	   }
    	   
    	   n/=2;
    	   p*=2;
       }
       
       if(k>t || k<c)
    	   System.out.println("NO");
       else
       {
    	   System.out.println("YES");
    	   
    	   while(q.size()!=k)
    	   {
    		   int x = q.poll();
    		   if(x==1)
    			   q.add(1);
    		   else
    		   {
    			   q.add(x/2);
    			   q.add(x/2);
    		   }
    	   }
    	   
    	   while(!q.isEmpty())
    		   System.out.print(q.poll()+" ");
       }
    }
    
    public static void main(String[] args) throws IOException {
        // TODO Auto-generated method stub
        new temp().solve();
    }
   
    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;
        }
    }
 
}