← Home
```go
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
	}

	// Minimal sum check: 1 + 2 + ... + k
	// k <= 10^5, so k*(k+1)/2 approx 5*10^9, fits in int64
	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

		// Calculate upper bound (limit) for a_i based on remaining sum
		// Condition: currentN - a_i >= MinSum(remDays terms starting > a_i)
		// MinSum = (a_i+1) + ... + (a_i+remDays) = a_i*remDays + remDays*(remDays+1)/2
		// currentN - a_i >= a_i*remDays + remDays*(remDays+1)/2
		// currentN - remDays*(remDays+1)/2 >= a_i*(remDays + 1)
		
		sumMinRem := remDays * (remDays + 1) / 2
		numerator := currentN - sumMinRem
		if numerator < 0 {
			fmt.Fprintln(writer, "NO")
			return
		}
		limit := numerator / (remDays + 1)

		// Calculate lower bound (minNeeded) for a_i based on remaining sum
		// Condition: currentN - a_i <= MaxSum(remDays terms starting <= 2*a_i)
		// MaxSum allows doubling: a_i, 2a_i, 4a_i...
		// Sum of sequence a_i...a_k <= a_i * (2^(remDays+1) - 1)
		// currentN <= a_i * (2^(remDays+1) - 1)
		
		var minNeeded int64
		// If remDays is large, 2^(remDays+1) exceeds int64 or definitely exceeds n
		if remDays >= 31 {
			minNeeded = 1
		} else {
			denom := (int64(1) << (remDays + 1)) - 1
			minNeeded = (currentN + denom - 1) / denom
		}

		// Determine valid range [low, high] for a_i
		low := prev + 1
		if i == 1 {
			low = 1
		}
		if minNeeded > low {
			low = minNeeded
		}

		high := prev * 2
		if i == 1 {
			high = limit + 1 // Effectively unbounded by previous term
		}
		if limit < high {
			high = limit
		}

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

		// Greedy strategy: pick the smallest valid value to satisfy conditions
		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)
}
```