← Home
package main

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

func main() {
	reader := bufio.NewReader(os.Stdin)
	writer := bufio.NewWriter(os.Stdout)
	defer writer.Flush()

	var n, k int64
	_, err := fmt.Fscan(reader, &n, &k)
	if err != nil {
		return
	}

	
	
	if n < k*(k+1)/2 {
		fmt.Fprintln(writer, "NO")
		return
	}

	a := make([]int64, 0, k)
	var prev int64 = 0
	currentN := n

	for i := int64(1); i <= k; i++ {
		remDays := k - i

		
		
		
		
		
		
		sumMinRem := remDays * (remDays + 1) / 2
		numerator := currentN - sumMinRem
		if numerator < 0 {
			fmt.Fprintln(writer, "NO")
			return
		}
		limit := numerator / (remDays + 1)

		
		
		
		
		
		
		var minNeeded int64
		
		if remDays >= 31 {
			minNeeded = 1
		} else {
			denom := (int64(1) << (remDays + 1)) - 1
			minNeeded = (currentN + denom - 1) / denom
		}

		
		low := prev + 1
		if i == 1 {
			low = 1
		}
		if minNeeded > low {
			low = minNeeded
		}

		high := prev * 2
		if i == 1 {
			high = limit + 1 
		}
		if limit < high {
			high = limit
		}

		if low > high {
			fmt.Fprintln(writer, "NO")
			return
		}

		
		val := low
		a = append(a, val)
		currentN -= val
		prev = val
	}

	fmt.Fprintln(writer, "YES")
	for i, x := range a {
		if i > 0 {
			fmt.Fprint(writer, " ")
		}
		fmt.Fprint(writer, x)
	}
	fmt.Fprintln(writer)
}