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.io.BufferedReader;


import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.math.BigInteger;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashSet;
import java.util.Map;
import java.util.SortedSet;
import java.util.StringTokenizer;
import java.util.TreeMap;
import java.util.TreeSet;


public class D implements Runnable
{

	static BufferedReader br = null;
	static PrintWriter pw = null;
	static StringTokenizer stk = new StringTokenizer("");

	public static void main(String[] args)
	{
		try
		{
			//br = new BufferedReader(new FileReader("input.txt"));
			//pw = new PrintWriter("output.txt");
			br = new BufferedReader(new InputStreamReader(System.in));
			pw = new PrintWriter(new OutputStreamWriter(System.out));
			
		} catch (Exception e)
		{
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		(new Thread(new D())).start();
	}

	public void nline()
	{
		try
		{
			stk = new StringTokenizer(br.readLine());
		} catch (IOException e)
		{
			e.printStackTrace();
		}
	}

	public int ni()
	{
		while (!stk.hasMoreTokens())
			nline();
		return Integer.valueOf(stk.nextToken());
	}

	public double nd()
	{
		while (!stk.hasMoreTokens())
			nline();
		return Double.valueOf(stk.nextToken());
	}

	public String nwrd()
	{
		while (!stk.hasMoreTokens())
			nline();
		return stk.nextToken();
	}

	public long nl()
	{
		while (!stk.hasMoreTokens())
			nline();
		return Long.valueOf(stk.nextToken());
	}

	public BigInteger nbi()
	{
		while (!stk.hasMoreTokens())
			nline();
		return new BigInteger(stk.nextToken());
	}

	public char nc()
	{
		while (!stk.hasMoreTokens())
			nline();
		return stk.nextToken().charAt(0);
	}

	public boolean isready()
	{
		try
		{
			return br.ready();
		} catch (IOException e)
		{
			return false;
		}
	}

	String rline()
	{
		try
		{
			return br.readLine();
		} catch (IOException e)
		{
			e.printStackTrace();
		}
		return null;
	}

	public void run()
	{
		solve();
		pw.close();
	}
	public class Hero {
		public long max_health;
		public long regen;
		public Hero(long h, long regen) {
			// TODO Auto-generated constructor stub
			max_health = h;
			this.regen = regen;
		}
	}
	public class Pair implements Comparable<Pair>{
		public long a;
		public long b;
		public Pair( long a, long b) {
			// TODO Auto-generated constructor stub
			this.a = a;
			this.b = b;
		}
		@Override
		public int compareTo(Pair o) {
			// TODO Auto-generated method stub
			if (a != o.a)
				return (int) Math.signum(a - o.a);
			if (b != o.b)
				return (int) Math.signum(b - o.b);
			return 0;
		}
		public  String toString() {
			return a + " " + b;
		}
		
	}


	public void solve()
	{
		int n = ni();
		int k = ni();
		long nn = n - ((long)k+1)*k / 2;
		if	(nn < 0) {pw.print("NO"); return; }
		int mas[] = new int[k];
		for(int i = 0; i < k; i++)
		{
			int s = ( (k - i) <= nn%k )?1:0;
			mas[i] = (int) (nn/k + s);
			
			mas[i] += (i+1);
		}
		
		for(int i = 0; i < k-1; i++)
		{
			if(mas[i] * 2 < mas[i+1] )
			{
				if(k <= 3 ) {pw.println("NO"); return;}
				
				mas[i+1]--;
				mas[k-1]++;
			}
		}
		pw.println("YES");
		for(int i:mas)
		{
			pw.print(i + " ");
		}

	}

}