← Home
package main

import (
	"bufio"
	"fmt"
	"os"
)

func main() {
	in := bufio.NewReaderSize(os.Stdin, 1<<20)
	out := bufio.NewWriterSize(os.Stdout, 1<<20)
	defer out.Flush()

	var n, kk int64
	fmt.Fscan(in, &n, &kk)
	k := int(kk)

	minSum := kk * (kk + 1) / 2
	if n < minSum {
		fmt.Fprintln(out, "NO")
		return
	}

	base := kk * (kk - 1) / 2
	x := (n - base) / kk

	sumMax := int64(0)
	cur := x
	for i := 0; i < k && sumMax < n; i++ {
		sumMax += cur
		if cur < n {
			cur *= 2
			if cur > n {
				cur = n
			}
		}
	}
	if sumMax < n {
		fmt.Fprintln(out, "NO")
		return
	}

	ans := make([]int64, k)
	ans[0] = x
	used := x

	for i := 1; i < k; i++ {
		t := int64(k - i)
		remain := n - used
		upper := (remain - t*(t-1)/2) / t
		y := ans[i-1] * 2
		if y > upper {
			y = upper
		}
		if y <= ans[i-1] {
			fmt.Fprintln(out, "NO")
			return
		}
		ans[i] = y
		used += y
	}

	if used != n {
		fmt.Fprintln(out, "NO")
		return
	}

	fmt.Fprintln(out, "YES")
	for i, v := range ans {
		if i > 0 {
			fmt.Fprint(out, " ")
		}
		fmt.Fprint(out, v)
	}
	fmt.Fprintln(out)
}