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.io.*;
import java.math.*;
import java.lang.*;
import java.util.*;
public final class CFG{
    public static class FastScanner {
        BufferedReader br;
        StringTokenizer st;

        public FastScanner() {
            try {
                br = new BufferedReader(new InputStreamReader(System.in));
                st = new StringTokenizer(br.readLine());
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

        public String next() {
            if (st.hasMoreTokens()) return st.nextToken();
            try {
                st = new StringTokenizer(br.readLine());
            } catch (Exception e) {
                e.printStackTrace();
            }
            return st.nextToken();
        }

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

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

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

        public String nextLine() {
            String line = "";
            if (st.hasMoreTokens()) line = st.nextToken();
            else try {
                return br.readLine();
            } catch (IOException e) {
                e.printStackTrace();
            }
            while (st.hasMoreTokens()) line += " " + st.nextToken();
            return line;
        }
    }
    public static class solver{
        long[] arr;
        public void solve()
        {
            arr=new long[64];
            psolve();
            FastScanner sc=new FastScanner();
            PrintWriter pw=new PrintWriter(System.out);
            long k,t,n,j,x,s,w,z;
            int i;
            n=sc.nextLong();
            k=sc.nextLong();
            List<Long> list=dop(n);
            PriorityQueue<Long>pq =new PriorityQueue<Long>(Collections.reverseOrder());
            for(i=0;i<list.size();i++)
                pq.add(list.get(i));
            if(pq.size()>k||k>n)
            {
                pw.print("NO");
                pw.flush();
                pw.close();
                return;
            }
            else
            {
                s=pq.size();
                pw.println("YES");
                while(s<k)
                {
                    w=pq.poll();
                    if(w!=1)
                    {
                        pq.add(w/2);
                        pq.add(w/2);
                        s++;
                    }
                }
                for(i=0;i<s;i++)
                {
                    pw.print(pq.poll()+" ");
                }
            }
            pw.flush();
            pw.close();
        }
        void psolve()
        {
            int i=0;
            arr[0]=1;
            for(i=1;i<64;i++)
            {
                arr[i]=arr[i-1]*2;
                //System.out.println(arr[i]);
            }
        }
        public List<Long> dop(long x) {
            List<Long> list=new ArrayList<Long>();
            int i=0;
            while(x!=0)
            {
                if((x&1)!=0)
                {
                    list.add(arr[i]);
                }
                x>>=1;
                i++;
            }
            return list;
        }
    }
    public static void main(String args[])
    {
        solver s=new solver();
        s.solve();
    }
}