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 Main
{
	public static void main(String[] args) throws IOException {
	    Scanner sc =new Scanner(System.in);
	    int n =sc.nextInt(),x=sc.nextInt();
	    TreeSet<Integer>hs =new TreeSet<>();
	    PriorityQueue <Integer> ll =new PriorityQueue<>(Collections.reverseOrder());
	    for (int i=0;i<31;++i)
	    	hs.add(1<<i);
	   // System.out.println(hs);
	   if (n%2==1){
	   	ll.add(1);
	   	n-=1;
	   }
	   while (n>0){
	   	int y =hs.floor(n);
	   	n-=y;
	   	ll.add(y);
	   }
	   while (true){
	   //	System.out.println(ll);
	   	if (ll.size()>x){
	   		System.out.println("NO");
	   		return;
	   	}
	   	if (ll.size()==x){
	   		System.out.println("YES");
	   		for (int i : ll)
	   			System.out.print(i+" ");
	   		return;
	   	}
	   	int a =ll.poll()/2;
	   	if (a==0){
	   		System.out.println("NO");
	   		return;
	   	}
	   	ll.add(a);ll.add(a);
	   }


	}
    static class Scanner {
		StringTokenizer st;
		BufferedReader br;

		public Scanner(InputStream system) {
			br = new BufferedReader(new InputStreamReader(system));
		}

		public Scanner(String file) throws Exception {
			br = new BufferedReader(new FileReader(file));
		}

		public String next() throws IOException {
			while (st == null || !st.hasMoreTokens())
				st = new StringTokenizer(br.readLine());
			return st.nextToken();
		}

		public String nextLine() throws IOException {
			return br.readLine();
		}

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

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

		public char nextChar() throws IOException {
			return next().charAt(0);
		}

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

		public boolean ready() throws IOException {
			return br.ready();
		}

		public void waitForInput() throws InterruptedException {
			Thread.sleep(3000);
		}
	}
}