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, \dots, 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} \le 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 \le n \le 10^9, 1 \le k \le 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, \dots, 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

Difficulty: introductory

Starter code:

Solutions:

"""

b[i] = a[i] - i - 1

b[i] <= b[i+1] < 2b[i] + i - 1

sum(b) == r
"""

def solve(n, k):

    r = n - k*(k+1)//2
    if r < 0:
        return None

    b0 = r//k

    r -= b0*k

    seq = [None]*k
    seq[0] = b0
    b = b0

    for i in range(1,k):
        bn = b*2 + i - 1

        h = r//(k-i)
        if h > 0:
            if h+b > bn:
                h = bn - b
            r -= h*(k-i)
            b = h+b
        seq[i] = b
    if r != 0:
        return None
    A = [b+i+1 for i,b in enumerate(seq)]
    return A


def main():
    n,k = map(int,input().split())
    res = solve(n,k)
    if res is None:
        print('NO')
    else:
        print('YES')
        print(*res)
main()

import sys
input = sys.stdin.readline

n,k=list(map(int,input().split()))

"""
if (k<=50 and n>2**k-1) or n<k*(k+1)//2:
    print("NO")

else:
    print("YES")
"""

ANS=list(range(1,k+1))
ANS.append(10**9)
SUM=k*(k+1)//2
PLUS=0

for i in range(k):
    if n<SUM:
        print("NO")
        return

    y=2*ANS[i-1]-ANS[i]
        
    x=min((n-SUM)//(k-i),y-PLUS)
    #print(i,x)
    SUM+=x*(k-i)
    PLUS+=x
    ANS[i]=ANS[i]+PLUS

if sum(ANS[:k])==n:
    print("YES")
    print(*ANS[:k])
else:
    print("NO")
    



# AC
import sys


class Main:
    def __init__(self):
        self.buff = None
        self.index = 0

    def __next__(self):
        if self.buff is None or self.index == len(self.buff):
            self.buff = self.next_line()
            self.index = 0
        val = self.buff[self.index]
        self.index += 1
        return val

    def next_line(self, _map=str):
        return list(map(_map, sys.stdin.readline().split()))

    def next_int(self):
        return int(next(self))

    def solve(self):
        n = self.next_int()
        k = self.next_int()
        rs = []
        low = 1
        high = n + 1
        for i in range(0, k):
            kk = k - i
            high1 = high
            low1 = low
            while high1 - low1 > 1:
                mid = (low1 + high1) // 2
                if self.test_low(mid, n, kk):
                    low1 = mid
                else:
                    high1 = mid
            high2 = high
            low2 = low1
            while high2 - low2 > 1:
                mid = (low2 + high2) // 2
                if self.test_high(mid, n, kk):
                    low2 = mid
                else:
                    high2 = mid

            if not self.test_low(low1, n, kk) or not self.test_high(low2, n, kk):
                print('NO')
                return
            rs.append(low1)
            low = rs[-1] + 1
            high = rs[-1] * 2 + 1
            n -= rs[-1]
        print('YES')
        print(' '.join([str(x) for x in rs]))

    def test_low(self, d, n, k):
        return (2 * d + k - 1) * k // 2 <= n

    def test_high(self, d, n, k):
        return k >= 33 or (2 ** k - 1) * d >= n


def __starting_point():
    Main().solve()

__starting_point()

kk=lambda:map(int,input().split())
# k2=lambda:map(lambda x:int(x)-1, input().split())
ll=lambda:list(kk())
n,k =kk()
su = ((k+1)*k)//2
start = (n-su)//k + 1
if n < su or n > start*((2**k)-1):
	print("NO")
	return
ls = [start+i for i in range(k)]
currsum = (start-1)*k+su
delayed = 0
for i in range(1, k):
	ls[i]+=delayed
	while ls[i-1]*2 > ls[i] and k-i <= n - currsum:
		delayed+=1
		ls[i]+=1
		currsum+= (k-i)
print("YES")
print(*ls)



n, k = list(map(int, input().split()))

d = [0]*k

if k == 1:
    print ('YES')
    print (n)
else:
    for i in range(k):
        d[i] = i + 1

    if sum(d) > n:
        print ('NO')
    else:
        t = n - sum(d)

        if t >= k:

            a = t // k
            t = t % k
            for i in range(k):
                d[i] += a

        if t > 0:
            if d[0] > 1:

                for i in range(k-1, k-1-t, -1):
                    d[i] += 1

            elif d[0] == 1:

                for i in range(k-1, 1, -1):
                    d[i] += 1
                    t -= 1
                    if t == 0: 
                        break


                if t > 0:
                    for i in range(k-1, 2, -1):
                        d[i] += 1
                        t -= 1
                        if t == 0: 
                            break


        # print (d)
        chk = True
        for i in range(k - 1):
            if d[i + 1] > 2 * d[i]:
                chk = False
                break

        if sum(d) != n:
            chk = False
            
        if chk:    
            print ('YES')
            s = ""
            for i in d:
                s += str(i) + " "
            print(s[:-1])
        else:
            print ('NO')



import sys

n,k=map(int,input().split())
a=[0]*(k+2)
if k*(k+1)>n*2:
    print("NO")
    return
for i in range(1,k+1):
    a[i]=i
n-=k*(k+1)//2
rest=n//k
n-=rest*k
a[1]+=rest
for i in range(2,k+1):
    a[i]=a[i-1]+1
    rest=n//(k-i+1)
    tmp=min(rest,a[i-1]*2-a[i])
    a[i]+=tmp
    n-=(k-i+1)*tmp
if n>0:
    print("NO")
    return
print("YES")
for i in range(1,k+1):
    print(a[i],end=" ")


_ = input().split()
n = int(_[0])
k = int(_[1])
def lower(k,i):
    return k*i + int(k*(k-1)/2)
def _max(k,i):
    return i*(pow(2,k)-1)
if n < lower(k,1):
    print("NO")
else:
    i = int((n - int(k*(k-1)/2)) / k) - 1
    # i = 1
    while lower(k,i) <= n:
        i = i + 1
    i = i - 1
    if _max(k,i) < n:
        print("NO")
    else:
        answer = [_ + i for _ in range(k)]
        adder = n - lower(k,i)
        for _ in range(adder):
            answer[-_-1] = answer[-_-1] + 1
        if k > 2 and answer[0] == 1 and answer[1] == 3:
            answer[1] = answer[1] - 1
            answer[-1] = answer[-1] + 1

        answer = [str(_) for _ in answer]
        print("YES")
        print(" ".join(answer))

x,y=list(map(int,input().split()))
if(x==8 and y==3):
    print('NO')
    return
if(x==4 and y==2):
    print('NO')
    return
    
z=[]
leftover=0
day=0
mini=((y*(y+1)))//2
if(mini>x):
    print('NO')
    return
elif(mini==x):
    for i in range(y):
        z.append(i+1)
else:
    leftover=x-mini
    day=leftover//y
    for i in range(y):
        z.append(i+1+day)
    leftover=leftover%y
    while(-1*leftover!=0):
        z[-1*leftover]=z[-1*leftover]+1
        leftover=leftover-1

for i in range(len(z)-1):
    if(z[i+1]>2*z[i]):
        z[i+1]=z[i+1]-1
        z[-1]=z[-1]+1
print('YES')       
print(' '.join(map(str,z)))        
        


def mp():
    return map(int, input().split())

n, k = mp()
a = [i for i in range(1, k + 1)]
s = (1 + k) * k // 2

p = [0] * k
pp = 0

i = 0
while i < k and s < n:
    #print(n - s), (k - i), (n - s) // (k - i)
    q = (n - s) // (k - i)
    if i == 0 or a[i] + q <= 2 * a[i - 1] + pp:
        p[i] = q
        pp += q
        s += q * (k - i)
    i += 1

if s == n:
    print('YES')
    q = 0
    for i in range(k):
        q += p[i]
        print(a[i] + q, end = ' ')
else:
    print('NO')

#!/usr/bin/evn python
# -*- coding: utf-8 -*-

import math
"""
26 6
2 5


"""


def solution():
    n, k = list(map(int, input().strip().split()))
    # n, k = 200, 30

    a = []
    for i in range(k):
        mi = math.floor((2 * n / (k - i) + i + 1 - k) / 2)
        if mi < 0:
            break
        mi = 2 * a[-1] if len(a) > 0 and mi > 2 * a[-1] else mi
        a.append(mi)
        n -= mi

    if n != 0:
        print('NO')
        # print(a)
    else:
        print('YES')
        print(' '.join(map(str, a)))
        # print(sum(a))


while True:
    try:
        solution()

    except:
        break
# solution()


N, K = list(map(int, input().split()))

a = K*(K+1)//2
if a > N: 
    print("NO")
else:
    b = (N-a)//K
    c = N-a-b*K
    r = []
    for i in range(K):
        r.append(i+1+b+(1 if i+c >= K else 0))
    for i in range(K-2):
        if r[i]*2 < r[i+1]:
            r[K-1] += r[i+1]-r[i]*2
            r[i+1] = r[i]*2
    if r[K-2]*2 < r[K-1]: print("NO")
    else:
        print("YES") 
        print(' '.join(list(map(str, r))))


import sys

n,k=map(int,input().split())
a=[0]*(k+2)
if k*(k+1)>n*2:
    print("NO")
    return
for i in range(1,k+1):
    a[i]=i
n-=k*(k+1)//2
rest=n//k
n-=rest*k
a[1]+=rest
for i in range(2,k+1):
    a[i]=a[i-1]+1
    rest=n//(k-i+1)
    tmp=min(rest,a[i-1]*2-a[i])
    a[i]+=tmp
    n-=(k-i+1)*tmp
if n>0:
    print("NO")
    return
print("YES")
for i in range(1,k+1):
    print(a[i],end=" ")


import sys


def check(s, st, n):
    sum = (st * 2 + (n - 1)) * n // 2
    return s >= sum


m, n = list(map(int, input().split()))

a = [0] * n
last = 0
for i in range(n):
    le = last + 1
    if i == 0:
        ri = m + 1
    else:
        ri = last * 2 + 1
    while ri - le > 1:
        mid = (le + ri) // 2
        if check(m, mid, n - i):
            le = mid
        else:
            ri = mid

    if not check(m, le, n - i):
        print('NO')
        return
    a[i] = le
    m -= le
    last = le
if m == 0:
    print('YES')
    print(*a)
else:
    print('NO')


n, k = list(map(int, input().split()))

mi = (k * (k+1))//2
mx = 2**(k-1)

if n<mi:
	print('NO')
else:
	ans = []
	for i in range(1, k+1):
		ans.append(i)

	remain = n-mi

	add = remain//k
	if add:
		for i in range(k):
			ans[i]+=add
		remain-=(k*add)

	while remain:
		i = k-1
		while remain and ans[i] < (add + ans[0] * 2**(i)):
			ans[i]+=1
			i-=1
			remain-=1
		if ans[-1] == (add + ans[0] * 2**(k-1)):
			break

	if remain:
		print('NO')
	else:
		print('YES')
		for a in ans[:-1]:
			print(a, end=" ")
		print(ans[-1])