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:
//package ;
import java.io.*;
import java.util.*;

public class C {
	public static void main(String[] args) throws IOException {
		Scanner sc = new Scanner();
		PrintWriter pw = new PrintWriter(System.out);
		TreeSet<Integer>pow=new TreeSet<>();
		int cur=1;
		while(cur<=(int)1e9)
		{
			pow.add(cur);
			cur*=2;
		}
		int n=sc.nextInt(),k=sc.nextInt();
		if(n==1)
		{
			if(k==1)
				System.out.println("YES\n"+1);
			else
				System.out.println("NO");
			return ;
		}
		ArrayList<Integer>sol=new ArrayList<>();
		if(n%2==1)
		{
			sol.add(1);
			n--;
			k--;
		}
//		if(!pow.contains(n) && k<2)
//			pw.print("NO");
		PriorityQueue<Integer>pq=new PriorityQueue<>(Collections.reverseOrder());
		if(pow.contains(n))
		{
			pq.add(n);
		}
		else
		{
			while(!pow.contains(n))
			{
				int x=pow.lower(n);
				pq.add(x);
				n-=x;
			}
			pq.add(n);
		}
		while(pq.size()<k && !pq.isEmpty())
		{
			int x=pq.poll();
			if(x==1)
				break;
			pq.add(x/2);
			pq.add(x/2);
		}
//		System.out.println(sol);
//		System.out.println(pq);
		
		if(pq.size()==k)
		{
			pw.println("YES");
			for(int x:sol)
				pw.print(x+" ");
			while(!pq.isEmpty())
				pw.print(pq.poll()+" ");
		}
		else
			pw.print("NO");
		pw.close();
	}

	static class Scanner {
		BufferedReader br;
		StringTokenizer st;

		Scanner() {
			br = new BufferedReader(new InputStreamReader(System.in));
		}

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

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

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

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

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

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

	}
}