Polycarp has to solve exactly n problems to improve his programming skill before an important programming competition. But this competition will be held very soon, most precisely, it will start in k days. It means that Polycarp has exactly k days for training!

Polycarp doesn't want to procrastinate, so he wants to solve at least one problem during each of k days. He also doesn't want to overwork, so if he solves x problems during some day, he should solve no more than 2x problems during the next day. And, at last, he wants to improve his skill, so if he solves x problems during some day, he should solve at least x+1 problem during the next day.

More formally: let [a_1, a_2, ..., a_k] be the array of numbers of problems solved by Polycarp. The i-th element of this array is the number of problems Polycarp solves during the i-th day of his training. Then the following conditions must be satisfied: 

  * sum of all a_i for i from 1 to k should be n; 
  * a_i should be greater than zero for each i from 1 to k; 
  * the condition a_i < a_{i + 1} ≤ 2 a_i should be satisfied for each i from 1 to k-1. 



Your problem is to find any array a of length k satisfying the conditions above or say that it is impossible to do it.

Input

The first line of the input contains two integers n and k (1 ≤ n ≤ 10^9, 1 ≤ k ≤ 10^5) — the number of problems Polycarp wants to solve and the number of days Polycarp wants to train.

Output

If it is impossible to find any array a of length k satisfying Polycarp's rules of training, print "NO" in the first line.

Otherwise print "YES" in the first line, then print k integers a_1, a_2, ..., a_k in the second line, where a_i should be the number of problems Polycarp should solve during the i-th day. If there are multiple answers, you can print any.

Examples

Input


26 6


Output


YES
1 2 4 5 6 8 


Input


8 3


Output


NO


Input


1 1


Output


YES
1 


Input


9 4


Output


NO
import java.util.*;
import java.io.*;
public class Main {
public static long sum(long a){
    return ((a*(a+1))/2);
}
public static boolean check(long goal , long n ,long[] arr , long z){
    long pro = 1L;
		long s=1L;
		s = (1 - (long) Math.pow(2,(int) (n))) / (1 - 2);
	//	System.out.println(s);
		long a1=(goal-sum(n-1))/n; long a2 = goal/s;
		long b1 = (goal-sum(n-1))%n; long b2=goal%s;
		if((a1==a2 && b1!=0 && b2!=0) || a1<a2 || a1==0)	 return false;
		else{
		    arr[(int) z] = a1;
		    return true;
		} 
		
}
	public static void main(String[] args) throws IOException {
		BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
		StringTokenizer st = new StringTokenizer(br.readLine());
		long goal = Long.parseLong(st.nextToken());
		long n = Long.parseLong(st.nextToken());
		long[] ans = new long[(int) n];
		long i=0L;
		if(check(goal,n,ans,i)){
		    i++;
		    long k = n-1;
		    goal -= ans[(int) i - 1];
		    while(i<n){
		    // System.out.println( goal  + " " + (k) +" " +i);
		      if( check(goal,k--,ans,i)) {
		          if(ans[(int)i]>2*ans[(int)i-1]) ans[(int)i] = 2*ans[(int)i-1];
		          i++; goal = goal - ans[(int) (i-1)];}
		    } System.out.println("YES");
		    		for(long c=0L; c<n; c++){
		    		    System.out.print(ans[(int) c] + " ");
		    		}

		}else{
		    System.out.println("NO");
		}
	}}