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 C{
     static PrintStream out = new PrintStream(System.out);
    public static void taskSolver(FastReader sc){
       int n=sc.nextInt();
       int k=sc.nextInt();
       if(k>n || (k==1 && (n&(n-1))!=0)){
           System.out.println("NO");return;
       }
       else{
          PriorityQueue<Integer> pq=new PriorityQueue<>(Collections.reverseOrder());
           for(int i=0;i<32;i++){
             if((n&(1<<i))!=0)pq.add(1<<i);
           }
           
           k=k-pq.size();
           while(k>0){
               int next=pq.poll();
               pq.add(next/2);
               pq.add(next/2);
               k--;
           }
           if(k<0){
             out.println("NO");return;
           }
          out.println("YES");
            for(int i:pq)out.print(i+" ");
          out.println();
       }
       
    }
      public static void main(String args[]){
       FastReader sc=new FastReader();        
           taskSolver(sc);
       } 
      
    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; 
        } 
  
    } 
  

  
     
}