#include <bits/stdc++.h>
using namespace std;
/// Typedef
typedef long long           ll;
typedef vector<int>         vi;
typedef pair<int,int>       pii;

#define pb                  push_back
#define ppb                 pop_back
#define MP                  make_pair
#define ff                  first
#define ss                  second
#define sf                  scanf
#define pf                  printf
#define SQR(x)              ((x)*(x))
#define loop(i, y)          for(int i=0; i<int(y); i++)
#define FOR(i, x, y)        for(int i=int(x); i<int(y); i++)
#define ROF(i, x, y)        for(int i=int(x); i>=int(y); i--)
#define all(c)              c.begin(), c.end()
#define sz(c)               int(c.size())
#define clr(x, y)           memset(x, y, sizeof(x))
#define si(x)               scanf("%d", &x)
#define sii(x, y)           scanf("%d %d", &x, &y)
#define siii(x, y, z)       scanf("%d %d %d", &x, &y, &z)
#define sl(x)               scanf("%lld", &x)
#define sll(x, y)           scanf("%lld %lld", &x, &y)
#define slll(x, y, z)       scanf("%lld %lld %lld", &x, &y, &z)

#ifdef VAMP
     #define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
    template < typename Arg1 >
    void __f(const char* name, Arg1&& arg1){
        cerr << name << " = " << arg1 << std::endl;
    }
    template < typename Arg1, typename... Args>
    void __f(const char* names, Arg1&& arg1, Args&&... args){
        const char* comma = strchr(names+1, ',');
        cerr.write(names, comma - names) << " = " << arg1 <<" | ";
        __f(comma+1, args...);
    }
#else
    #define debug(...)
#endif
///******************************************START******************************************

/// Constants
#define MAX                 200005
#define MOD                 1000000007
#define eps                 1e-9
#define INF              	0x3f3f3f3f3f3f3f3f // 4,557,430,888,798,830,399
#define inf                 0x3f3f3f3f // 1,061,109,567
#define PI                  acos(-1.0)  // 3.1415926535897932

vector<ll> v;

int main(){
    #ifdef VAMP
        clock_t tStart = clock();
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
   	ll n, k; sll(n, k);
   	ll last=0, sum=0;
   	for(int i=1; i<k; i++){
   		ll lo=last+1, ans=lo;
   		ll hi= last?last*2:n;
   		while(lo<=hi){
   			ll mid=(lo+hi)>>1;
   			ll lm=mid, hm=lm+(k-i);
   			if((lm+hm)*(k-i+1)/2 > n) hi=mid-1;
   			else ans=lo, lo=mid+1;
   		}
   		lo=ans;
   		hi=lo+(k-i);
   		ll tot=(hi+lo)*(k-i+1)/2;
   		if(tot>n) printf("NO\n"), exit(0);
   		v.pb(lo);
   		n-=lo;
   		last=lo;
   		sum+=last;
   	}
   	if(!last) printf("%lld\n", n), exit(0);
   	if(n<=last or n>last*2) printf("NO\n"), exit(0);
   	v.pb(n);
   	printf("YES\n");
   	for(auto &x: v){
   		printf("%lld ", x);
   	}

    #ifdef VAMP
        fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
    #endif
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
/// Typedef
typedef long long           ll;
typedef vector<int>         vi;
typedef pair<int,int>       pii;

#define pb                  push_back
#define ppb                 pop_back
#define MP                  make_pair
#define ff                  first
#define ss                  second
#define sf                  scanf
#define pf                  printf
#define SQR(x)              ((x)*(x))
#define loop(i, y)          for(int i=0; i<int(y); i++)
#define FOR(i, x, y)        for(int i=int(x); i<int(y); i++)
#define ROF(i, x, y)        for(int i=int(x); i>=int(y); i--)
#define all(c)              c.begin(), c.end()
#define sz(c)               int(c.size())
#define clr(x, y)           memset(x, y, sizeof(x))
#define si(x)               scanf("%d", &x)
#define sii(x, y)           scanf("%d %d", &x, &y)
#define siii(x, y, z)       scanf("%d %d %d", &x, &y, &z)
#define sl(x)               scanf("%lld", &x)
#define sll(x, y)           scanf("%lld %lld", &x, &y)
#define slll(x, y, z)       scanf("%lld %lld %lld", &x, &y, &z)

#ifdef VAMP
     #define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
    template < typename Arg1 >
    void __f(const char* name, Arg1&& arg1){
        cerr << name << " = " << arg1 << std::endl;
    }
    template < typename Arg1, typename... Args>
    void __f(const char* names, Arg1&& arg1, Args&&... args){
        const char* comma = strchr(names+1, ',');
        cerr.write(names, comma - names) << " = " << arg1 <<" | ";
        __f(comma+1, args...);
    }
#else
    #define debug(...)
#endif
///******************************************START******************************************

/// Constants
#define MAX                 200005
#define MOD                 1000000007
#define eps                 1e-9
#define INF              	0x3f3f3f3f3f3f3f3f // 4,557,430,888,798,830,399
#define inf                 0x3f3f3f3f // 1,061,109,567
#define PI                  acos(-1.0)  // 3.1415926535897932

vector<ll> v;

int main(){
    #ifdef VAMP
        clock_t tStart = clock();
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
   	ll n, k; sll(n, k);
   	ll last=0, sum=0;
   	for(int i=1; i<=k; i++){
   		ll lo=last+1, ans=lo;
   		ll hi= last?last*2:n;
   		while(lo<=hi){
   			ll mid=(lo+hi)>>1;
   			ll lm=mid, hm=lm+(k-i);
   			ll now=(lm+hm)*(k-i+1)/2;
   			if(now > n) hi=mid-1;
   			else ans=mid, lo=mid+1;
   		}
   		lo=ans;
   		hi=lo+(k-i);
   		ll tot=(hi+lo)*(k-i+1)/2;
   		if(tot>n) printf("NO\n"), exit(0);
   		v.pb(lo);
   		n-=lo;
   		last=lo;
   		sum+=last;
   	}
   	if(n) printf("NO\n"), exit(0);
   	printf("YES\n");
   	for(auto &x: v){
   		printf("%lld ", x);
   	}

    #ifdef VAMP
        fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
    #endif
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
/// Typedef
typedef long long           ll;
typedef vector<int>         vi;
typedef pair<int,int>       pii;

#define pb                  push_back
#define ppb                 pop_back
#define MP                  make_pair
#define ff                  first
#define ss                  second
#define sf                  scanf
#define pf                  printf
#define SQR(x)              ((x)*(x))
#define loop(i, y)          for(int i=0; i<int(y); i++)
#define FOR(i, x, y)        for(int i=int(x); i<int(y); i++)
#define ROF(i, x, y)        for(int i=int(x); i>=int(y); i--)
#define all(c)              c.begin(), c.end()
#define sz(c)               int(c.size())
#define clr(x, y)           memset(x, y, sizeof(x))
#define si(x)               scanf("%d", &x)
#define sii(x, y)           scanf("%d %d", &x, &y)
#define siii(x, y, z)       scanf("%d %d %d", &x, &y, &z)
#define sl(x)               scanf("%lld", &x)
#define sll(x, y)           scanf("%lld %lld", &x, &y)
#define slll(x, y, z)       scanf("%lld %lld %lld", &x, &y, &z)

#ifdef VAMP
     #define debug(...) __f(#__VA_ARGS__, __VA_ARGS__)
    template < typename Arg1 >
    void __f(const char* name, Arg1&& arg1){
        cerr << name << " = " << arg1 << std::endl;
    }
    template < typename Arg1, typename... Args>
    void __f(const char* names, Arg1&& arg1, Args&&... args){
        const char* comma = strchr(names+1, ',');
        cerr.write(names, comma - names) << " = " << arg1 <<" | ";
        __f(comma+1, args...);
    }
#else
    #define debug(...)
#endif
///******************************************START******************************************

/// Constants
#define MAX                 200005
#define MOD                 1000000007
#define eps                 1e-9
#define INF              	0x3f3f3f3f3f3f3f3f // 4,557,430,888,798,830,399
#define inf                 0x3f3f3f3f // 1,061,109,567
#define PI                  acos(-1.0)  // 3.1415926535897932

vector<ll> v;

int main(){
    #ifdef VAMP
        clock_t tStart = clock();
        freopen("input.txt", "r", stdin);
        freopen("output.txt", "w", stdout);
    #endif
   	ll n, k; sll(n, k);
   	ll last=0, sum=0;
   	for(int i=1; i<=k; i++){
   		ll lo=last+1, ans=lo;
   		ll hi=last*2;
   		while(lo<=hi){
   			ll mid=(lo+hi)>>1;
   			ll lm=mid, hm=lm+(k-i);
   			if((lm+hm)*(k-i+1)/2 > n) hi=mid-1;
   			else ans=lo, lo=mid+1;
   		}
   		lo=ans;
   		hi=lo+(k-i);
   		ll tot=(hi+lo)*(k-i+1)/2;
   		if(tot>n) printf("NO\n"), exit(0);
   		v.pb(lo);
   		n-=lo;
   		last=lo;
   		sum+=last;
   	}
   	printf("YES\n");
   	for(auto &x: v){
   		printf("%lld ", x);
   	}

    #ifdef VAMP
        fprintf(stderr, "\n>> Runtime: %.10fs\n", (double) (clock() - tStart) / CLOCKS_PER_SEC);
    #endif
    return 0;
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n;
    std::cin>>n>>k;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    ll x=std::max((ll)1 ,((2*n/k-k+1)/2-1));
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::min(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::min(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    ll sum=ans[0];
    for(int i=1;i<k;i++){
        sum+=ans[i];
        if(ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]){
            std::cout<<"NO";
            return 0;
        }
    }
    if(sum!=n){
        std::cout<<"NO";
        return 0;
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n,n2;
    std::cin>>n>>k;
    n2=n;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    ll x=std::max((ll)1 ,((2*n/k-k+1)/2-1));
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::min(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::min(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    ll sum=ans[0];
    for(int i=1;i<k;i++){
        sum+=ans[i];
        if(ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]){
            std::cout<<"NO";
            return 0;
        }
    }
    if(sum!=n2){
        std::cout<<"NO";
        return 0;
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n,n2;
    std::cin>>n>>k;
    n2=n;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    ll x=std::max((ll)1 ,((2*n/k-k+2)/2-1));
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::max(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::max(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    ll sum=ans[0];
    for(int i=1;i<k;i++){
        sum+=ans[i];
        if((ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]) && ans[i]>0){
            std::cout<<"NO";
            return 0;
        }
    }
    if(sum!=n2){
        std::cout<<"NO";
        return 0;
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n,n2;
    std::cin>>n>>k;
    n2=n;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    ll x=std::max((ll)1 ,((2*n/k-k+2)/2-1));
    if((k+2*x+1)*k/2<=n)
        x++;
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::min(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::min(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    ll sum=ans[0];
    for(int i=1;i<k;i++){
        sum+=ans[i];
        if((ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]) && ans[i]>0){
            std::cout<<"NO";
            return 0;
        }
    }
    if(sum!=n2){
        std::cout<<"NO";
        return 0;
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n;
    std::cin>>n>>k;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    ll x=std::max((ll)1 ,((2*n/k-k+1)/2-1));
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::min(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::min(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    for(int i=1;i<k;i++){
        if(ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]){
            std::cout<<"NO";
            return 0;
        }
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n,n2;
    std::cin>>n>>k;
    n2=n;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    ll x=std::max((ll)1 ,((2*n/k-k+1)/2-1));
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::min(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::min(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    ll sum=ans[0];
    for(int i=1;i<k;i++){
        sum+=ans[i];
        if((ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]) && ans[i]>0){
            std::cout<<"NO";
            return 0;
        }
    }
    if(sum!=n2){
        std::cout<<"NO";
        return 0;
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <queue>
#include<map>
#include<cmath>
typedef long long ll;
std::map<ll,ll> a1,b1;
std::vector<std::vector<ll>> g;
std::vector<bool> used;
ll k=0;
int main(){
    ll n,n2;
    std::cin>>n>>k;
    n2=n;
    std::vector<ll> ans(k);
    if(((k+1)*k)/2>n) {
        std::cout << "NO";
        return 0;
    }
    //
    ll x=std::max((ll)1 ,((2*n/k-k+1)/2-1));
    for(int i=0;i<k;i++)
        ans[i]=i+x;
    n=n-(k+2*x-1)*k/2;
    bool flag=false;
    while(n!=0) {
        if(n==0)
            break;
        for (int i = k - 1; i >= 0; i--) {
            if(n==0) {
                break;
            }
            ll n1=n;
            n-=std::min(n,std::min(-n+2*ans[i-1],ans[i-1]*2-ans[i]));
            ans[i]+=std::min(n1,std::min(-n1+2*ans[i-1],ans[i-1]*2-ans[i]));
        }
        if(n==0)
            break;
        for(int i=0;i<k;i++){
            ans[i]++;
        }
    }
    ll sum=ans[0];
    for(int i=1;i<k;i++){
        sum+=ans[i];
        if((ans[i]>ans[i-1]*2 || ans[i]<=ans[i-1]) && ans[i]>0){
            std::cout<<"NO";
            return 0;
        }
    }
    if(sum!=n2){
        std::cout<<"NO";
        return 0;
    }
    std::cout<<"YES"<<'\n';
    for(int i=0;i<k;i++){
        std::cout<<ans[i]<<" ";
    }
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

int main()
{
    int k, n, flag = 1;;
    scanf("%d %d", &k, &n);
    long long sum = n*(n+1)/2;
    if(sum > k)
    {
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
            }
            if(res > a[2] - a[1]-1)
                flag = 0;
            else
                a[1] += res;

        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

int main()
{
    int k, n, flag = 1;;
    scanf("%d %d", &k, &n);
    long long sum = n*(n+1)/2;
    if(sum > k)
    {
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - a[i-1]*2-a[i] <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

int main()
{
    long long k, n, flag = 1;;
    scanf("%lld %lld", &k, &n);
    long long sum = n*(n+1)/2;
    //printf("%lld\n", sum);
    if(sum > k)
    {
        //printf("###");
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            int j = 10;
            //printf("%d ##\n", a[1]);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    j = i;
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
            }
            if(res >= 0){
                if(res > a[2] - a[1]-1)
                    flag = 0;
                else{
                    a[1] += res;
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

#define ll long long

ll pow(ll a, ll b)
{
    ll res = 1;
    while(b)
    {
        if(b & 1) res *= a;
        a *= a;
        b >>= 1;
    }
    return res;
}

int main()
{
    long long k, n, flag = 1;;
    scanf("%lld %lld", &k, &n);
    long long sum = n*(n+1)/2;
    //printf("%lld\n", sum);

    if(sum > k)
    {
        //printf("###");
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            int j = 10;
            //printf("%d ##\n", a[1]);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    j = i;
                    //printf("%d ####\n", j);
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
                if(i == 2)
                    j = i;
            }
            if(n == 2)
                j = 2;
            if(res >= 0 && j == 2){
                if(res > a[2] - a[1]-1){
                    //printf("%d###\n", res);
                    flag = 0;
                }
                else{
                    a[1] += res;
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

#define ll long long

ll pow(ll a, ll b)
{
    ll res = 1;
    while(b)
    {
        if(b & 1) res *= a;
        a *= a;
        b >>= 1;
    }
    return res;
}

int main()
{
    long long k, n, flag = 1;;
    scanf("%lld %lld", &k, &n);
    long long sum = n*(n+1)/2;
    //printf("%lld\n", sum);

    if(sum > k)
    {
        //printf("###");
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            int j = 10;
            //printf("%d ##\n", a[1]);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    j = i;
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
            }
            if(res > 1){
                if(res > a[2] - a[1]-1){
                    //printf("%d###\n", res);
                    flag = 0;
                }
                else{
                    a[1] += res;
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

#define ll long long

ll pow(ll a, ll b)
{
    ll res = 1;
    while(b)
    {
        if(b & 1) res *= a;
        a *= a;
        b >>= 1;
    }
    return res;
}

int main()
{
    long long k, n, flag = 1;;
    scanf("%lld %lld", &k, &n);
    long long sum = n*(n+1)/2;
    //printf("%lld\n", sum);

    if(sum > k)
    {
        //printf("###");
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            int j = 10;
            //printf("%d ##\n", a[1]);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    j = i;
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
            }
            if(res >= 0 && j == 2){
                if(res > a[2] - a[1]-1)
                    flag = 0;
                else{
                    a[1] += res;
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

int main()
{
    int k, n, flag = 1;;
    scanf("%d %d", &k, &n);
    long long sum = n*(n+1)/2;
    if(sum > k)
    {
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            int j = 10;
            //printf("%d ##\n", a[1]);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    j = i;
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
            }
            if(res >= 0){
                if(res > a[2] - a[1]-1)
                    flag = 0;
                else{
                    a[1] += res;
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include<cstdio>
#include<cmath>
#include<bits/stdc++.h>
using namespace std;

const int maxn = 100005;
int a[maxn];

#define ll long long

ll pow(ll a, ll b)
{
    ll res = 1;
    while(b)
    {
        if(b & 1) res *= a;
        a *= a;
        b >>= 1;
    }
    return res;
}

int main()
{
    long long k, n, flag = 1;;
    scanf("%lld %lld", &k, &n);
    long long sum = n*(n+1)/2;
    //printf("%lld\n", sum);

    if(sum > k)
    {
        //printf("###");
        flag = 0;
    }
    else if(n != 1)
    {
        for(int i = 1; i <= n; i++)
        {
            a[i] = i;
            //printf("%d \n", a[i]);
        }
        long long res = k - sum;
        //printf("%d\n", res);
        int t = res/n;
        for(int i = 1; i <= n; i++)
        {
            a[i] += t;
        }
        res -= t*n;
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        if(res <= a[n-1]*2-a[n])
        {
            a[n] += res;
            //printf("%d \n", a[n]);
        }
//        for(int i = 1; i <= n; i++)
//            printf("%d ", a[i]);
//        printf("\n");
        else if(res > a[n-1]*2-a[n])
        {
            res -= a[n-1]*2-a[n];
            a[n] += a[n-1]*2-a[n];
            //printf("%d###\n", res);
            int j = 10;
            //printf("%d ##\n", a[1]);
            for(int i = n-1; i >= 2; i--)
            {
                if(res - (a[i-1]*2-a[i]) <= 0){
                    a[i] += res;
                    res -= a[i-1]*2-a[i];
                    j = i;
                    //printf("%d ####\n", j);
                    break;
                }
                else
                {
                    res -= a[i-1]*2 - a[i];
                    a[i] += a[i-1]*2-a[i];
                }
                if(i == 2)
                    j = i;
            }
            if(res >= 0 && j == 2){
                if(res > a[2] - a[1]-1){
                    //printf("%d###\n", res);
                    flag = 0;
                }
                else{
                    a[1] += res;
                }
            }
        }
    }
    else if(n == 1)
        a[1] = k;
    if(!flag)
        printf("NO\n");
    else{
        printf("YES\n");
        for(int i = 1; i <= n; i++)
        {
            printf("%d ", a[i]);
        }
        printf("\n");
    }
    return 0;
}


#include <cstdio>

int check(int n,int k,int last) {
	if((last+last+k-1)*k > n*2)
		return 0;
	for(int i=1;i<=k && n>0 ;i++) {
		n-=last;
		last*=2;
	}
	if(n>0)
		return 2;
	else
		return 1;
}

int n, k, a[100005];

int main() {
	scanf("%d %d", &n, &k);
	if(check(n,k,1)==0 || check(n,k,1)==2) {
		printf("NO");
		return 0;
	}
	a[1]=1;n--;
	for(int i=2; i<k; i++) {
		int l=a[i-1]+1, r=a[i-1]*2, m, re;
		while(l<=r) {
			m=(l+r)/2;
			re=check(n,k-i+1,m);
			if(re==1)
				break;
			else if(re==0)
				r=m-1;
			else
				l=m+1;
		}
		a[i]=m;
		n-=a[i];
	}
	printf("YES\n");
	if(k!=1) a[k]=n;
	for(int i=1;i<=k;i++)
		printf("%d ",a[i]);
	return 0;
}


#include <cstdio>
#include <cctype>

inline long long read (void)
{
	register long long x = 0, f = 1, ch = getchar();
	while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
	while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
	return x * f;
}

long long n, k, a[100005];

int main (void)
{
	n = read(); k = read();
	long long s = (k + 1) * k / 2;
	if(s > n) { printf("NO\n"); return 0; }
	long long t = (n - s) / k, c = (n - s) % k;
	for(register int i=1; i<=k; ++i) a[i] = i;
	for(register int i=1; i<=k; ++i) a[i] += t;
	int now = k;
	while(c)
	{
		if(a[now] < a[now-1] * 2)
		{
			c --;
			a[now]++;
			now --;
		}
		else if(now != k)
			now = k;
		else { printf("NO\n"); return 0; }
	}
	printf("YES\n");
	for(register int i=1; i<=k; ++i) printf("%lld ", a[i]);
	return 0;
}


#include <cstdio>
#include <cctype>

#define int long long

inline int read (void)
{
	register int x = 0, f = 1, ch = getchar();
	while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
	while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
	return x * f;
}

int check (int n, int k, int first)
{
	int tota = (first + first + k - 1) * k / 2;
	if(n < tota) return 0;
	int now = first, totb = 0;
	for(register int i=1; i<=k; ++i)
	{
		totb += now;
		if(totb > n) return 1;
		now <<= 1;
	}
	return 2;
}

int n, k, a[100005];

signed main (void)
{
	n = read(); k = read();
	if(check(n, k, 1) != 1) { printf("NO\n"); return 0; }
	a[1] = 1; n--;
	for(register int i=2; i<k; ++i)
	{
		int left = a[i-1] + 1, right = a[i-1] * 2, mid;
		while(left <= right)
		{
			mid = (left + right) >> 1;
			int res = check (n, k - i + 1, mid);
			if(res == 0) right = mid - 1;
			else if(res == 1) break;
			else left = mid + 1;
		}
		a[i] = mid;
		n -= mid;
	}
	a[k] = n;
	printf("YES\n");
	for(register int i=1; i<=k; ++i) printf("%lld ", a[i]);
	return 0;
}


#include <cstdio>
#include <cctype>

#define int long long

inline int read (void)
{
	register int x = 0, f = 1, ch = getchar();
	while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
	while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
	return x * f;
}

int check (int n, int k, int first)
{
	int tota = (first + first + k - 1) * k / 2;
	if(n < tota) return 0;
	int now = first, totb = 0;
	for(register int i=1; i<=k; ++i)
	{
		totb += now;
		if(totb >= n) return 1;
		now <<= 1;
	}
	return 2;
}

int n, k, a[100005];

signed main (void)
{
	n = read(); k = read();
	if(check(n, k, 1) != 1) { printf("NO\n"); return 0; }
	a[1] = 1; n--;
	for(register int i=2; i<k; ++i)
	{
		int left = a[i-1] + 1, right = a[i-1] * 2, mid;
		while(left <= right)
		{
			mid = (left + right) >> 1;
			int res = check (n, k - i + 1, mid);
			if(res == 0) right = mid - 1;
			else if(res == 1) break;
			else left = mid + 1;
		}
		a[i] = mid;
		n -= mid;
	}
	a[k] = n;
	printf("YES\n");
	for(register int i=1; i<=k; ++i) printf("%lld ", a[i]);
	return 0;
}


#include <cstdio>
#include <cctype>

#define int long long

inline int read (void)
{
	register int x = 0, f = 1, ch = getchar();
	while(!isdigit(ch)) { if(ch == '-') f = -f; ch = getchar(); }
	while(isdigit(ch)) { x = x * 10 + ch - '0'; ch = getchar(); }
	return x * f;
}

int check (int n, int k, int first)
{
	int tota = (first + first + k - 1) * k / 2;
	if(n < tota) return 0;
	int now = first, totb = 0;
	for(register int i=1; i<=k; ++i)
	{
		totb += now;
		if(totb >= n) return 1;
		now <<= 1;
	}
	return 2;
}

int n, k, a[100005];

signed main (void)
{
	n = read(); k = read();
	if(check(n, k, 1) != 1) { printf("NO\n"); return 0; }
	a[1] = 1; n--;
	for(register int i=2; i<k; ++i)
	{
		int left = a[i-1] + 1, right = a[i-1] * 2, mid;
		while(left <= right)
		{
			mid = (left + right) >> 1;
			int res = check (n, k - i + 1, mid);
			if(res == 0) right = mid - 1;
			else if(res == 1) break;
			else left = mid + 1;
		}
		a[i] = mid;
		n -= mid;
	}
	if(k != 1) a[k] = n;
	printf("YES\n");
	for(register int i=1; i<=k; ++i) printf("%lld ", a[i]);
	return 0;
}


#include <cstdio>

int check(int n,int k,int last) {
	if((last+last+k-1)*k/2 > n)
		return 1;
	for(int i=1; i<=k && n>0; i++) {
		n-=last;
		last*=2;
	}
	if(n>0)
		return 2;
	else
		return 0;
}

int n, k, a[100005];

int main() {
	scanf("%d %d", &n, &k);
	if(check(n,k,1)!=0) {
		printf("NO");
		return 0;
	}
	a[1]=1;n--;
	for(int i=2; i<k; i++) {
		int l=a[i-1]+1, r=a[i-1]*2, m, re;
		while(l<=r) {
			m=(l+r)/2;
			re=check(n,k-i+1,m);
			if(re==0)
				break;
			else if(re==1)
				r=m-1;
			else
				l=m+1;
		}
		a[i]=m;
		n-=a[i];
	}
	printf("YES\n");
	if(k!=1) a[k]=n;
	for(int i=1;i<=k;i++)
		printf("%d ",a[i]);
	return 0;
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    /*
    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }
    */

    arr.resize(days);

    int index = 0;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        while (arr[j] >= 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    /*
    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }
    */

    arr.resize(days);

    int index = 0;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] >= 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok and arr[i] - arr[i-1] > 1){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    arr.resize(days);

    int index = 1;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int remained = problems - sum;
    int distribution = remained / days;

    for (auto &it : arr){
        it += distribution;
        sum += distribution;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] > 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok and arr[i] - arr[i-1] > 1){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    arr.resize(days);

    int index = 1;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    if (days == 1){
        arr[0] = problems;
        sum = problems;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] > 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok and arr[i] - arr[i-1] > 1){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    arr.resize(days);

    int index = 1;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int remained = problems - sum;

    if (remained < 0){
        cout << "NO\n";
        return 0;
    }

    int distribution = remained / days;

    for (auto &it : arr){
        it += distribution;
        sum += distribution;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] > 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok and arr[i] - arr[i-1] > 1){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }

    arr.resize(days);

    int index = 0;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum != problems){
        arr[i]++;
        sum++;

        int j = i;
        while (arr[j] >= 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
        }
    }

    cout << "YES\n";
    for (auto it : arr){
        cout << it << " ";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    /*
    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }
    */

    arr.resize(days);

    int index = 0;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] >= 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok){
            arr[i]--;
            sum++;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    /*
    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }
    */

    arr.resize(days);

    int index = 1;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] >= 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok and arr[i] - arr[i-1] > 1){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    /*
    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }
    */

    arr.resize(days);

    int index = 1;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] > 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok and arr[i] - arr[i-1] > 1){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include <iostream>
#include <vector>
#include <algorithm>
#include <set>

using namespace std;

void debug(vector <int> sum){
    for (auto it : sum){
        cout << it << " ";
    }
    cout << "\n";
}

unsigned long long maxPossible;
unsigned long long minPossible;
unsigned long long sum;

vector <int> arr;

int main(){
    int problems;
    int days;

    cin >> problems;
    cin >> days;

    /*
    if (days < 64){
        maxPossible = (1<<days)-1;

        if (maxPossible < problems){
            cout << "NO";
            return 0;
        }
    }

    minPossible = (days)*(days+1)/2;
    if (minPossible > problems){
        cout << "NO";
        return 0;
    }
    */

    arr.resize(days);

    int index = 0;
    sum = 0;
    for (auto &it : arr){
        it = index;
        index++;
        sum += it;
    }

    int i = days-1;

    while (sum < problems){
        arr[i]++;
        sum++;

        int j = i;
        bool ok = false;
        while (arr[j] >= 2*arr[j-1]){
            arr[j-1]++;
            sum++;
            j--;
            ok = true;
        }
        if (ok){
            arr[i]--;
            sum--;
        }
    }

    if (sum == problems){
        cout << "YES\n";
        for (auto it : arr){
            cout << it << " ";
        }
    }
    else{
        cout << "NO\n";
    }
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n,k;
ll f(ll st,ll end){
	if(st > end) return -1;
	ll mid=(st+end)/2;
	ll x=(k*(2*mid+k-1))/2;
	if(x > n) return f(st,mid-1);
	for(ll i=1;i<=k;i++){
		ll g=mid*(pow(2,i)-1);
		if(g>=n){
			return mid;
		}
	}
	return f(mid+1,end);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin>>n>>k;
	ll st=f(1,1e9);
	if(st==-1){
		cout<<"NO"; return 0;
	}
	ll s=(k*(2*st+k-1))/2;
	ll diff=n-s;
	vector<ll> v;
	if(diff==0){
		cout<<"YES\n";
		for(int i=1;i<=k;i++) cout<<i<<" ";
		return 0;
	}
	for(ll i=k;i>=2;i--){
		n=k-i+1;
		ll s1=(n*(k+i))/2;
		ll s2=(2*(i-1)*(pow(2,n)-1));
		ll up=s2-s1;
		if(up>=diff){
			for(ll j=1;j<=i;j++) v.push_back(st+j-1);
			for(ll j=i+1;j<=k;j++){v.push_back(2*v[j-2]); diff-=v[j-1]-(st+j-1); }
			for(int j=i;j<=k;j++){
				ll x=2*v[j-2]-v[j-1];
				if(x >= diff){
					v[j-1]+=diff;
					break;
				}
				else{
					v[j-1]+=x;
					diff-=x;
				}
			}
			break;
		}
	}
	cout<<"YES\n";
	for(auto  x : v) cout<<x<<" ";
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n,k;
ll f(ll st,ll end){
	if(st > end) return -1;
	ll mid=(st+end)/2;
	ll x=(k*(2*mid+k-1))/2;
	if(x > n) return f(st,mid-1);
	for(ll i=1;i<=k;i++){
		ll g=mid*(pow(2,i)-1);
		if(g>=n){
			return mid;
		}
	}
	return f(mid+1,end);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin>>n>>k;
	ll st=f(1,1e9);
	if(st==-1){
		cout<<"NO"; return 0;
	}
	ll s=(k*(2*st+k-1))/2;
	ll diff=n-s;
	vector<ll> v;
	if(diff==0){
		cout<<"YES\n";
		for(int i=1;i<=k;i++) cout<<i<<" ";
		return 0;
	}
	for(ll i=k;i>=2;i--){
		n=k-i+1;
		ll s1=(n*(k+i))/2;
		ll s2=(2*(i-1)*(pow(2,n)-1));
		ll up=s2-s1;
		if(up>=diff){
			for(ll j=1;j<=i;j++) v.push_back(j);
			for(ll j=i+1;j<=k;j++){v.push_back(2*v[j-2]); diff-=v[j-1]-(st+j-1); }
			for(int j=i;j<=k;j++){
				ll x=2*v[j-2]-v[j-1];
				if(x >= diff){
					v[j-1]+=diff;
					break;
				}
				else{
					v[j-1]+=x;
					diff-=x;
				}
			}
			break;
		}
	}
	cout<<"YES\n";
	for(auto  x : v) cout<<x<<" ";
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n,k;
ll f(ll st,ll end){
	if(st > end) return -1;
	ll mid=(st+end)/2;
	ll x=(k*(2*mid+k-1))/2;
	if(x > n) return f(st,mid-1);
	for(ll i=1;i<=k;i++){
		ll g=mid*(pow(2,i)-1);
		if(g>=n){
			return mid;
		}
	}
	return f(mid+1,end);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin>>n>>k;
	ll st=f(1,1e9);
	if(st==-1){
		cout<<"NO"; return 0;
	}
	ll s=(k*(2*st+k-1))/2;
	ll diff=n-s;
	vector<ll> v;
	if(diff==0){
		cout<<"YES\n";
		for(int i=1;i<=k;i++) cout<<st+i-1<<" ";
		return 0;
	}
	for(ll i=k;i>=2;i--){
		n=k-i+1;
		ll s1=(n*(2*(st+i-1)+n-1))/2;
		ll s2=(2*(st+i-1)*(pow(2,n)-1));
		ll up=s2-s1;
		if(up>=diff){
			for(ll j=1;j<=i;j++) v.push_back(st+j-1);
			for(ll j=i+1;j<=k;j++){v.push_back(2*v[j-2]); diff-=v[j-1]-(st+j-1); }
			for(int j=i;j<=k;j++){
				ll x=2*v[j-2]-v[j-1];
				if(x >= diff){
					v[j-1]+=diff;
					break;
				}
				else{
					v[j-1]+=x;
					diff-=x;
				}
			}
			break;
		}
	}
	cout<<"YES\n";
	for(auto  x : v) cout<<x<<" ";
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n,k;
ll f(ll st,ll end){
	if(st > end) return -1;
	ll mid=(st+end)/2;
	ll x=(k*(2*mid+k-1))/2;
	if(x > n) return f(st,mid-1);
	for(ll i=1;i<=k;i++){
		ll g=mid*(pow(2,i)-1);
		if(g>=n){
			return mid;
		}
	}
	return f(mid+1,end);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin>>n>>k;
	ll st=f(1,1e9);
	if(st==-1){
		cout<<"NO"; return 0;
	}
	ll s=(k*(2*st+k-1))/2;
	ll diff=n-s;
	vector<ll> v;
	cout<<st<<" "<<diff<<"\n";
	if(diff==0){
		cout<<"YES\n";
		for(int i=1;i<=k;i++) cout<<i<<" ";
		return 0;
	}
	for(ll i=k;i>=2;i--){
		n=k-i+1;
		ll s1=(n*(k+i))/2;
		ll s2=(2*(i-1)*(pow(2,n)-1));
		ll up=s2-s1;
		if(up>=diff){
			for(ll j=1;j<=i;j++) v.push_back(st+j-1);
			for(ll j=i+1;j<=k;j++){v.push_back(2*v[j-2]); diff-=v[j-1]-(st+j-1); }
			for(int j=i;j<=k;j++){
				ll x=2*v[j-2]-v[j-1];
				if(x >= diff){
					v[j-1]+=diff;
					break;
				}
				else{
					v[j-1]+=x;
					diff-=x;
				}
			}
			break;
		}
	}
	cout<<"YES\n";
	for(auto  x : v) cout<<x<<" ";
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n,k;
ll f(ll st,ll end){
	if(st > end) return -1;
	ll mid=(st+end)/2;
	ll x=(k*(2*mid+k-1))/2;
	if(x > n) return f(st,mid-1);
	for(ll i=1;i<=k;i++){
		ll g=mid*(pow(2,i)-1);
		if(g>=n){
			return mid;
		}
	}
	return f(mid+1,end);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin>>n>>k;
	ll st=f(1,1e9);
	if(st==-1){
		cout<<"NO"; return 0;
	}
	ll s=(k*(2*st+k-1))/2;
	ll diff=n-s;
	vector<ll> v;
	if(diff==0){
		cout<<"YES\n";
		for(int i=1;i<=k;i++) cout<<st+i-1<<" ";
		return 0;
	}
	for(ll i=k;i>=2;i--){
		n=k-i+1;
		ll s1=(n*(2*(st+i-1)+n-1))/2;
		ll s2=(2*(st+i-2)*(pow(2,n)-1));
		ll up=s2-s1;
		if(up>=diff){
			for(ll j=1;j<=i;j++) v.push_back(st+j-1);
			for(ll j=i+1;j<=k;j++){v.push_back(2*v[j-2]); diff-=v[j-1]-(st+j-1); }
			for(int j=i;j<=k;j++){
				ll x=2*v[j-2]-v[j-1];
				if(x >= diff){
					v[j-1]+=diff;
					break;
				}
				else{
					v[j-1]+=x;
					diff-=x;
				}
			}
			break;
		}
	}
	cout<<"YES\n";
	for(auto  x : v) cout<<x<<" ";
}


#include<bits/stdc++.h>
using namespace std;
#define ll long long
#define ld long double
ll n,k;
ll f(ll st,ll end){
	if(st > end) return -1;
	ll mid=(st+end)/2;
	ll x=(k*(2*mid+k-1))/2;
	if(x > n) return f(st,mid-1);
	for(ll i=1;i<=k;i++){
		ll g=mid*(pow(2,i)-1);
		if(g>=n){
			return mid;
		}
	}
	return f(mid+1,end);
}
int main() {
	ios_base::sync_with_stdio(false);
	cin.tie(NULL); cout.tie(NULL);
	cin>>n>>k;
	ll st=f(1,1e9);
	if(st==-1){
		cout<<"NO"; return 0;
	}
	ll s=(k*(2*st+k-1))/2;
	ll diff=n-s;
	vector<ll> v;
	if(diff==0){
		cout<<"YES\n";
		for(int i=1;i<=k;i++) cout<<i<<" ";
		return 0;
	}
	for(ll i=k;i>=2;i--){
		n=k-i+1;
		ll s1=(n*(k+i))/2;
		ll s2=(2*(i-1)*(pow(2,n)-1));
		ll up=s2-s1;
		if(up>=diff){
			for(ll j=1;j<=i;j++) v.push_back(j);
			for(ll j=i+1;j<=k;j++){v.push_back(2*v[j-2]); diff-=v[j-1]-j; }
			for(int j=i;j<=k;j++){
				ll x=2*v[j-2]-v[j-1];
				if(x >= diff){
					v[j-1]+=diff;
					break;
				}
				else{
					v[j-1]+=x;
					diff-=x;
				}
			}
			break;
		}
	}
	cout<<"YES\n";
	for(auto  x : v) cout<<x<<" ";
}


#include <bits/stdc++.h>
#include<iostream>
#include<algorithm>
#include<cstdlib>
#include<cstring>
#include<cstdio>
#include<string>
#include<vector>
#include<bitset>
#include<queue>
#include<deque>
#include<stack>
#include<cmath>
#include<list>
#include<map>
#include<set>
//#define DEBUG
#define RI register int
#define endl "\n"
using namespace std;
typedef long long ll;
//typedef __int128 lll;
const int N=100000+10;
const int M=100000+10;
const int MOD=1e9+7;
const double PI = acos(-1.0);
const double EXP = 1E-8;
const int INF = 0x3f3f3f3f;
ll t,n,m,k,p,l,r,u,v;
int ans,cnt,flag,temp,sum;
int a[N];
char str;
struct node{};
int main()
{
#ifdef DEBUG
	freopen("input.in", "r", stdin);
	//freopen("output.out", "w", stdout);
#endif
    //ios::sync_with_stdio(false);
    //cin.tie(0);
    //cout.tie(0);
    //scanf("%d",&t);
    //while(t--){
    scanf("%I64d%I64d",&n,&k);
    if(n<k*(k+1)/2){
        cout<<"NO"<<endl;
        return 0;
    }
    for(int i=1;i<=k;i++){
        ll base=(k-i+1ll)*(k-i+2ll)/2;
        ll num=max(1ll,i==1?(n-base)/(k-i+1ll)+1:min(2ll*a[i-1],(n-base)/(k-i+1ll)+1));
        //cout<<base<<" "<<num<<endl;
        if(num>a[i-1]&&(num<=a[i-1]*2||i==1)){
            n-=num;
            a[i]=num;
        }else{
            cout<<"NO"<<endl;
            return 0;
        }
    }
    if(n){
        cout<<"NO"<<endl;
        return 0;
    }
    cout<<"YES"<<endl;
    for(int i=1;i<=k;i++)
        printf("%d%c",a[i]," \n"[i==k]);
    //}

#ifdef DEBUG
	printf("Time cost : %lf s\n",(double)clock()/CLOCKS_PER_SEC);
#endif
    //cout << "Hello world!" << endl;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
long long poww(long long a, long long b){
  if (b == 0)
    return 1;
  return a * poww(a, b - 1);
}
int main(){
  long long k, n;
  cin >> n >> k;
  long long arr[k];
  long long sum = 0;
  for (long long i = 0; i < k; i++){
    arr[i] = i + 1;
    sum += i + 1;
  }
  if (sum > n){
    cout << "NO\n";
    return 0;
  }
  else {
    long long c = 1;
    while (sum < n && c > 0){
      c = 0;
      for (long long i = k - 1; i > 0; i--){
        long long d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        sum += d;
        arr[i] += d;
        if (d > 0)
          c++;
        if (sum == n)
          break;
      }
    }
    if (sum == n){
      cout << "YES\n";
      for (long long i = 0; i < k; i++){
        cout << arr[i] << ' ';
      }
      return 0;
    }
    sum = 0;
    for (long long i = 0; i < k; i++){
      arr[i] = 2 + i;
      sum += arr[i];
    }
    int add = (n - sum) / k;
    for (int i = 0; i < k; i++){
      arr[i] += add;
      sum += add;
    }
    if (sum > n){
      cout << "NO";
      return 0;
    }
    while (sum < n){
      for (long long i = k - 1; i >= 0; i--){
        if (i == 0){
          arr[i]++;
          sum++;
          continue;
        }
        long long d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        arr[i] += d;
        sum += d;
        if (sum == n)
          break;
      }
    }
  }
  cout << "YES\n";
  for (long long i = 0; i < k; i++){
    cout << arr[i] << ' ';
  }
}


#include <bits/stdc++.h>
using namespace std;
int poww(int a, int b){
  if (b == 0)
    return 1;
  return a * poww(a, b - 1);
}
int main(){
  int k, n;
  cin >> n >> k;
  int arr[k];
  int sum = 0;
  for (int i = 0; i < k; i++){
    arr[i] = i + 1;
    sum += i + 1;
  }
  if (sum > n){
    cout << "NO\n";
    return 0;
  }
  if (k <= 30 && n < poww(2, k)){
    for (int i = 0; i < k; i++){
      arr[i] = poww(2, i);
    }
    sum = poww(2, k) - 1;
    while (sum > n){
      for (int i = k - 1; i > 1; i--){
        int d = min(sum - n, arr[i] - arr[i - 1] - 1);
        arr[i] -= d;
        sum -= d;
        if (sum == n)
          break;
      }
    }
  }
  else {
    sum = 0;
    for (int i = 0; i < k; i++){
      arr[i] = 2 + i;
      sum += arr[i];
    }
    if (sum > n){
      cout << "NO";
      return 0;
    }
    while (sum < n){
      for (int i = k - 1; i >= 0; i--){
        if (i == 0){
          arr[i]++;
          sum++;
          continue;
        }
        int d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        arr[i] += d;
        sum += d;
        if (sum == n)
          break;
      }
    }
  }
  cout << "YES\n";
  for (int i = 0; i < k; i++){
    cout << arr[i] << ' ';
  }
}


#include <bits/stdc++.h>
using namespace std;
int poww(int a, int b){
  if (b == 0)
    return 1;
  return a * poww(a, b - 1);
}
int main(){
  int n, k;
  cin >> n >> k;
  int arr[k];
  int sum = 0;
  for (int i = 0; i < k; i++){
    arr[i] = i + 1;
    sum += i + 1;
  }
  if (sum > n){
    cout << "NO\n";
    return 0;
  }
  if (k <= 30 && n < poww(2, k)){
    for (int i = 0; i < k; i++){
      arr[i] = poww(2, i);
    }
    sum = poww(2, k) - 1;
    while (sum > n){
      for (int i = k - 1; i > 1; i--){
        int d = min(sum - n, arr[i] - arr[i - 1] - 1);
        arr[i] -= d;
        sum -= d;
        if (sum == n)
          break;
      }
    }
  }
  else {
    sum = 0;
    for (int i = 0; i < k; i++){
      arr[i] = 2 + i;
      sum += arr[i];
    }
    if (sum > n){
      cout << "NO";
      return 0;
    }
    while (sum < n){
      for (int i = k - 1; i >= 0; i--){
        if (i == 0){
          arr[i]++;
          sum++;
          continue;
        }
        int d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        arr[i] += d;
        sum += d;
        if (sum == n)
          break;
      }
    }
  }
  cout << "YES\n";
  for (int i = 0; i < k; i++){
    cout << arr[i] << ' ';
  }
}


#include <bits/stdc++.h>
using namespace std;
int poww(int a, int b){
  if (b == 0)
    return 1;
  return a * poww(a, b - 1);
}
int main(){
  int k, n;
  cin >> n >> k;
  int arr[k];
  int sum = 0;
  for (int i = 0; i < k; i++){
    arr[i] = i + 1;
    sum += i + 1;
  }
  if (sum > n){
    cout << "NO\n";
    return 0;
  }
  else {
    int c = 1;
    while (sum < n && c > 0){
      c = 0;
      for (int i = k - 1; i > 0; i--){
        int d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        sum += d;
        arr[i] += d;
        if (d > 0)
          c++;
        if (sum == n)
          break;
      }
    }
    if (sum == n){
      cout << "YES\n";
      for (int i = 0; i < k; i++){
        cout << arr[i] << ' ';
      }
      return 0;
    }
    sum = 0;
    for (int i = 0; i < k; i++){
      arr[i] = 2 + i;
      sum += arr[i];
    }
    if (sum > n){
      cout << "NO";
      return 0;
    }
    while (sum < n){
      for (int i = k - 1; i >= 0; i--){
        if (i == 0){
          arr[i]++;
          sum++;
          continue;
        }
        int d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        arr[i] += d;
        sum += d;
        if (sum == n)
          break;
      }
    }
  }
  cout << "YES\n";
  for (int i = 0; i < k; i++){
    cout << arr[i] << ' ';
  }
}


#include <bits/stdc++.h>
using namespace std;
long long poww(long long a, long long b){
  if (b == 0)
    return 1;
  return a * poww(a, b - 1);
}
int main(){
  long long k, n;
  cin >> n >> k;
  long long arr[k];
  long long sum = 0;
  for (long long i = 0; i < k; i++){
    arr[i] = i + 1;
    sum += i + 1;
  }
  if (sum > n){
    cout << "NO\n";
    return 0;
  }
  else {
    long long c = 1;
    while (sum < n && c > 0){
      c = 0;
      for (long long i = k - 1; i > 0; i--){
        long long d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        sum += d;
        arr[i] += d;
        if (d > 0)
          c++;
        if (sum == n)
          break;
      }
    }
    if (sum == n){
      cout << "YES\n";
      for (long long i = 0; i < k; i++){
        cout << arr[i] << ' ';
      }
      return 0;
    }
    sum = 0;
    for (long long i = 0; i < k; i++){
      arr[i] = 2 + i;
      sum += arr[i];
    }
    if (sum > n){
      cout << "NO";
      return 0;
    }
    while (sum < n){
      for (long long i = k - 1; i >= 0; i--){
        if (i == 0){
          arr[i]++;
          sum++;
          continue;
        }
        long long d = min(n - sum, arr[i - 1] * 2 - arr[i]);
        arr[i] += d;
        sum += d;
        if (sum == n)
          break;
      }
    }
  }
  cout << "YES\n";
  for (long long i = 0; i < k; i++){
    cout << arr[i] << ' ';
  }
}


#include <bits/stdc++.h>
using namespace std;
int main(){
  int n, k;
  cin >> n >> k;
  int arr[k];
  int sum = 0;
  for (int i = 0; i < k; i++){
    arr[i] = i + 1;
    sum += i + 1;
  }
  if (sum > n){
    cout << "NO\n";
    return 0;
  }
  int add = (n - sum) / k;
  for (int i = 0; i < k; i++){
    arr[i] += add;
    sum += add;
  }
  for (int i = k - 1; i >= 0; i--){
    if (sum < n){
      arr[i]++;
      sum++;
    }
  }
  cout << "YES\n";
  for (int i = 0; i < k; i++){
    cout << arr[i] << ' ';
  }
}


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll vv = ans.back();
ans.back() = 2 * ans[ans.size()-2];
vv-=ans.back();
ll cur = vv / (m-1);
ll ch = vv % (m-1);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll cjk = 0;
for (int q = 0;q < m-1;++q)
    cjk+=ans[q];
ll vv = ans.back();
vv-=(2*ans[ans.size()-2]);
ans.back() = 2*ans[ans.size()-2];
cjk+=ans.back();
ll cur = (n-cjk) / (m);
ll ch = (n-cjk) % (m);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
if (ch) {
    ans.back()+=cur+1;
}
else ans.back()+=cur;
sort(ans.begin(),ans.end());
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
else if (ans[i]==ans[i-1]) {
        if (!i) {
                ++ans[i];
        --ans[i-1];
    if (ans[i]>2*ans[i-1]) {
        cout<<"NO";
        return 0;
    }
}
else {
    cout<<"NO";
    return 0;
}
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll vv = ans.back();
ans.back() = 2 * ans[ans.size()-2];
vv-=ans.back();
ll cur = vv / (m-1);
ll ch = vv % (m-1);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll vv = ans.back();
ans.back() = 2 * ans[ans.size()-2];
vv-=ans.back();
ll cur = vv / (m-1);
ll ch = vv % (m-1);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll cjk = 0;
for (int q = 0;q < m-1;++q)
    cjk+=ans[q];
ll vv = ans.back();
vv-=(2*ans[ans.size()-2]);
ans.back() = 2*ans[ans.size()-2];
cjk+=ans.back();
ll cur = (n-cjk) / (m);
ll ch = (n-cjk) % (m);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
if (ch) {
    ans.back()+=cur+1;
}
else ans.back()+=cur;
sort(ans.begin(),ans.end());
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
else if (ans[i]==ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll cjk = 0;
for (int q = 0;q < m-1;++q)
    cjk+=ans[q];
ll vv = ans.back();
vv-=(2*ans[ans.size()-2]);
ans.back() = 2*ans[ans.size()-2];
cjk+=ans.back();
ll cur = (n-cjk) / (m);
ll ch = (n-cjk) % (m);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
if (ch) {
    ans.back()+=cur+1;
}
else ans.back()+=cur;
sort(ans.begin(),ans.end());
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
else if (ans[i]==ans[i-1]) {
        if (i==1) {
                ++ans[i];
        --ans[i-1];
    if (ans[i]>2*ans[i-1]) {
        cout<<"NO";
        return 0;
    }
}
else {
    cout<<"NO";
    return 0;
}
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll cjk = 0;
for (int q = 0;q < m-1;++q)
    cjk+=ans[q];
ll vv = ans.back();
vv-=(2*ans[ans.size()-2]);
ans.back() = 2*ans[ans.size()-2] + 1;
cjk+=ans.back();
ll cur = (n-cjk) / (m);
ll ch = (n-cjk) % (m);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
if (ch) {
    ans.back()+=cur+1;
}
else ans.back()+=cur;
sort(ans.begin(),ans.end());
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
else if (ans[i]==ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll vv = ans.back();
vv-=(2*ans[ans.size()-2]);
ll cur = vv / (m);
ll ch = vv % (m);
ans.back() = ans[ans.size()-2] + 1;
for (int i = m-1;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
sort(ans.begin(),ans.end());
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll vv = ans.back();
ans.back() = 2 * ans[ans.size()-2];
vv-=ans.back();
ll cur = vv / (m-1);
ll ch = vv % (m-1);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <vector>
#include <iostream>
#include <algorithm>
#include <string>

#define pb push_back
#define F first
#define S second
#define ll long long
#define ld long double
#define endl '\n'
#define TIME 1.0*clock()/CLOCKS_PER_SEC
#define pii pair < short , short >
#define Endl '\n'
#define pshort pair <short,short>
using namespace std;
short SX[4] = {0 , 1 , -1 , 0};
short SY[4] = {1 , 0 , 0 , -1};
int32_t main() {
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
#ifdef CHUCHUNDRA
freopen("input.txt", "r", stdin);
freopen("output.txt", "w", stdout);
#else
//freopen("input.txt", "r", stdin);
//freopen("output.txt", "w", stdout);
#endif
ll n,m;
cin>>n>>m;
ll ss = 0;
for (int i = 1;i<=m;i++)
    ss+=i;
if (ss>n) {
    cout<<"NO";
    return 0;
}
ll sum = 0;
vector <ll> ans;
for (int i = 1;i<m;i++)
    {
        ans.pb(i);
        sum+=i;
    }
ans.pb(n-sum);
sort(ans.begin(),ans.end());
if (m==1) {
        cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
return 0;
}
if (ans.back()<=2*ans[ans.size()-2]) {
        cout<<"YES"<<'\n';
    for (int i = 0;i < m;i++)
        cout<<ans[i]<<" ";
        return 0;
}
ll cjk = 0;
for (int q = 0;q < m-1;++q)
    cjk+=ans[q];
ll vv = ans.back();
vv-=(2*ans[ans.size()-2]);
ans.back() = 2*ans[ans.size()-2];
cjk+=ans.back();
ll cur = (n-cjk) / (m);
ll ch = (n-cjk) % (m);
for (int i = m-2;i>=0;i--) {
    if (ch) {--ch;ans[i]+=cur+1;}
    else ans[i]+=cur;
}
if (ch) {
    ans.back()+=cur+1;
}
else ans.back()+=cur;
sort(ans.begin(),ans.end());
for (int i = 1;i < m;i++)
if (ans[i]>2*ans[i-1]) {
    cout<<"NO";
    return 0;
}
cout<<"YES"<<'\n';
for (int i = 0;i < m;i++)
    cout<<ans[i]<<" ";
return 0;
}
/*01*/


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define s second
#define f first
long long const mod = 1000000007;
#define inf 1000000000000000000
inline ll add(ll a, ll b){ return ((a%mod)+(b%mod)+mod)%mod;}
inline ll mul(ll a, ll b){ return (((a%mod)*(b%mod))%mod+mod)%mod;}
inline ll sub(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod;}
#define level 22

ll power(ll x,ll y,ll m)
{
    if (y == 0)
        return 1;
    ll p = power(x, y/2, m) % m;
    p = (p * p) % m;
    return (y%2 == 0)? p : (x * p) % m;
}

ll modInv(ll x)
{
    return power(x,mod-2,mod)%mod;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    ll n,k;
    cin>>n>>k;

    ll mn=(k*(k+1))/2;
    if(n<mn){
        cout<<"NO\n";
        return 0;
    }
    ll inc=0;
    ll x1=n-mn;
    ll x2=x1/k;
    n=n-x2*k;
    //cout<<mn<<" "<<x1<<" "<<x2<<" "<<n<<endl;
    /*ll mx;
    if(k>30)
        mx=n;
    else
        mx=pow(2,k)-1;*/
   // cout<<x2<<" "<<mn<<" "<<n<<endl;
    bool f=true;
    ll a[k];
    for(int i=0;i<k;i++)
    {
        a[i]=x2+i+1;
    }
    ll x=a[0]*2;
    ll diff=n-mn;
    ll dp[k];
    memset(dp,0,sizeof(dp));
    for(int i=1;i<k;i++)
    {
        ll y=(k-i);
        ll z=diff/y;
        if(diff<y)
        {
            for(int j=k-1;j>i && diff>0;j--)
                a[j]++,diff--;
            break;
        }
        else
        {
            z=min(z,x-a[i]);
            dp[i]=z;
            diff=diff-y*z;
            x=a[i]*2;
        }
        //cout<<i<<" "<<dp[i]<<endl;
    }
    // cout<<"jhcbfh\n";
    if(diff!=0)
    {
        cout<<"NO\n";
    }
    else
    {
        cout<<"YES\n";
        for(int i=1;i<k;i++)
            dp[i]=dp[i-1]+dp[i];
        for(int i=0;i<k;i++)
            cout<<a[i]+dp[i]<<" ";
        cout<<endl;
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define s second
#define f first
long long const mod = 1000000007;
#define inf 1000000000000000000
inline ll add(ll a, ll b){ return ((a%mod)+(b%mod)+mod)%mod;}
inline ll mul(ll a, ll b){ return (((a%mod)*(b%mod))%mod+mod)%mod;}
inline ll sub(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod;}
#define level 22

ll power(ll x,ll y,ll m)
{
    if (y == 0)
        return 1;
    ll p = power(x, y/2, m) % m;
    p = (p * p) % m;
    return (y%2 == 0)? p : (x * p) % m;
}

ll modInv(ll x)
{
    return power(x,mod-2,mod)%mod;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    ll n,k;
    cin>>n>>k;

    ll mn=(k*(k+1))/2;
    if(n<mn){
        cout<<"NO\n";
        return 0;
    }
    ll inc=0;
    ll x1=n-mn;
    ll x2=x1/k;
    n=n-x2*k;
    ll mx;
    if(k>30)
        mx=n;
    else
        mx=pow(2,k)-1;
    if(mn<=n && n<=mx)
    {
        cout<<"YES\n";
        ll a[n];
        for(int i=0;i<k;i++)
        {
            a[i]=i+1;
        }
        ll x=4;
        ll diff=n-mn;
        ll dp[k];
        memset(dp,0,sizeof(dp));
        for(int i=2;i<k;i++)
        {
            ll y=(k-i);
            ll z=diff/y;
            if(diff<y)
            {
                for(int j=k-1;j>i && diff>0;j--)
                    a[j]++,diff--;
                break;
            }
            else
            {
                z=min(z,x-a[i]);
                dp[i]=z;
                diff=diff-y*z;
                x=x*2;
            }
        }
        for(int i=1;i<k;i++)
            dp[i]=dp[i-1]+dp[i];
        for(int i=0;i<k;i++)
            cout<<a[i]+dp[i]+x2<<" ";
        cout<<endl;
    }
    else
    {
        cout<<"NO\n";
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define s second
#define f first
long long const mod = 1000000007;
#define inf 1000000000000000000
inline ll add(ll a, ll b){ return ((a%mod)+(b%mod)+mod)%mod;}
inline ll mul(ll a, ll b){ return (((a%mod)*(b%mod))%mod+mod)%mod;}
inline ll sub(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod;}
#define level 22

ll power(ll x,ll y,ll m)
{
    if (y == 0)
        return 1;
    ll p = power(x, y/2, m) % m;
    p = (p * p) % m;
    return (y%2 == 0)? p : (x * p) % m;
}

ll modInv(ll x)
{
    return power(x,mod-2,mod)%mod;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    ll n,k;
    cin>>n>>k;

    ll mn=(k*(k+1))/2;
    ll mx=pow(2,k)-1;
    if(mn<=n && n<=mx)
    {
        cout<<"YES\n";
        ll a[n];
        for(int i=0;i<n;i++)
        {
            a[i]=i+1;
        }
        ll x=4;
        ll diff=n-mn;
        ll dp[k];
        memset(dp,0,sizeof(dp));
        for(int i=2;i<k;i++)
        {
            ll y=(k-i);
            ll z=diff/y;
            if(diff<y)
            {
                for(int j=k-1;j>i && diff>0;j--)
                    a[j]++,diff--;
                break;
            }
            else
            {
                z=min(z,x-a[i]);
                dp[i]=z;
                diff=diff-y*z;
                x=x*2;
            }
        }
        for(int i=1;i<k;i++)
            dp[i]=dp[i-1]+dp[i];
        for(int i=0;i<k;i++)
            cout<<a[i]+dp[i]<<" ";
        cout<<endl;
    }
    else
    {
        cout<<"NO\n";
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define s second
#define f first
long long const mod = 1000000007;
#define inf 1000000000000000000
inline ll add(ll a, ll b){ return ((a%mod)+(b%mod)+mod)%mod;}
inline ll mul(ll a, ll b){ return (((a%mod)*(b%mod))%mod+mod)%mod;}
inline ll sub(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod;}
#define level 22

ll power(ll x,ll y,ll m)
{
    if (y == 0)
        return 1;
    ll p = power(x, y/2, m) % m;
    p = (p * p) % m;
    return (y%2 == 0)? p : (x * p) % m;
}

ll modInv(ll x)
{
    return power(x,mod-2,mod)%mod;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    ll n,k;
    cin>>n>>k;

    ll mn=(k*(k+1))/2;
    if(n<mn){
        cout<<"NO\n";
        return 0;
    }
    ll inc=0;
    ll x1=n-mn;
    ll x2=x1/k;
    n=n-x2*k;
    ll mx;
    if(k>30)
        mx=n;
    else
        mx=pow(2,k)-1;
   // cout<<x2<<" "<<mn<<" "<<n<<endl;
    if(mn<=n && n<=mx)
    {
        cout<<"YES\n";
        ll a[k];
        for(int i=0;i<k;i++)
        {
            a[i]=i+1;
        }
        ll x=4;
        ll diff=n-mn;
        ll dp[k];
        memset(dp,0,sizeof(dp));
        for(int i=2;i<k;i++)
        {
            ll y=(k-i);
            ll z=diff/y;
            if(diff<y)
            {
                for(int j=k-1;j>i && diff>0;j--)
                    a[j]++,diff--;
                break;
            }
            else
            {
                z=min(z,x-a[i]);
                dp[i]=z;
                diff=diff-y*z;
                x=x*2;
            }
            //cout<<i<<" "<<dp[i]<<endl;
        }
       // cout<<"jhcbfh\n";
        for(int i=1;i<k;i++)
            dp[i]=dp[i-1]+dp[i];
        for(int i=0;i<k;i++)
            cout<<a[i]+dp[i]+x2<<" ";
        cout<<endl;
    }
    else
    {
        cout<<"NO\n";
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define s second
#define f first
long long const mod = 1000000007;
#define inf 1000000000000000000
inline ll add(ll a, ll b){ return ((a%mod)+(b%mod)+mod)%mod;}
inline ll mul(ll a, ll b){ return (((a%mod)*(b%mod))%mod+mod)%mod;}
inline ll sub(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod;}
#define level 22

ll power(ll x,ll y,ll m)
{
    if (y == 0)
        return 1;
    ll p = power(x, y/2, m) % m;
    p = (p * p) % m;
    return (y%2 == 0)? p : (x * p) % m;
}

ll modInv(ll x)
{
    return power(x,mod-2,mod)%mod;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    ll n,k;
    cin>>n>>k;

    ll mn=(k*(k+1))/2;
    if(n<mn){
        cout<<"NO\n";
        return 0;
    }
    ll inc=0;
    ll x1=n-mn;
    ll x2=x1/k;
    n=n-x2*k;
    ll mx;
    if(k>30)
        mx=n;
    else
        mx=pow(2,k)-1;
    if(mn<=n && n<=mx)
    {
        cout<<"YES\n";
        ll a[n];
        for(int i=0;i<n;i++)
        {
            a[i]=i+1;
        }
        ll x=4;
        ll diff=n-mn;
        ll dp[k];
        memset(dp,0,sizeof(dp));
        for(int i=2;i<k;i++)
        {
            ll y=(k-i);
            ll z=diff/y;
            if(diff<y)
            {
                for(int j=k-1;j>i && diff>0;j--)
                    a[j]++,diff--;
                break;
            }
            else
            {
                z=min(z,x-a[i]);
                dp[i]=z;
                diff=diff-y*z;
                x=x*2;
            }
        }
        for(int i=1;i<k;i++)
            dp[i]=dp[i-1]+dp[i];
        for(int i=0;i<k;i++)
            cout<<a[i]+dp[i]+x2<<" ";
        cout<<endl;
    }
    else
    {
        cout<<"NO\n";
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef long double ld;
#define s second
#define f first
long long const mod = 1000000007;
#define inf 1000000000000000000
inline ll add(ll a, ll b){ return ((a%mod)+(b%mod)+mod)%mod;}
inline ll mul(ll a, ll b){ return (((a%mod)*(b%mod))%mod+mod)%mod;}
inline ll sub(ll a, ll b){ return ((a%mod)-(b%mod)+mod)%mod;}
#define level 22

ll power(ll x,ll y,ll m)
{
    if (y == 0)
        return 1;
    ll p = power(x, y/2, m) % m;
    p = (p * p) % m;
    return (y%2 == 0)? p : (x * p) % m;
}

ll modInv(ll x)
{
    return power(x,mod-2,mod)%mod;
}

int main()
{
    ios::sync_with_stdio(0);
    cin.tie(NULL);
    cout.tie(NULL);

    ll n,k;
    cin>>n>>k;

    ll mn=(k*(k+1))/2;
    if(n<mn){
        cout<<"NO\n";
        return 0;
    }
    ll inc=0;
    ll x1=n-mn;
    ll x2=x1/k;
    n=n-x2*k;
    ll mx=pow(2,k)-1;
    if(mn<=n && n<=mx)
    {
        cout<<"YES\n";
        ll a[n];
        for(int i=0;i<n;i++)
        {
            a[i]=i+1;
        }
        ll x=4;
        ll diff=n-mn;
        ll dp[k];
        memset(dp,0,sizeof(dp));
        for(int i=2;i<k;i++)
        {
            ll y=(k-i);
            ll z=diff/y;
            if(diff<y)
            {
                for(int j=k-1;j>i && diff>0;j--)
                    a[j]++,diff--;
                break;
            }
            else
            {
                z=min(z,x-a[i]);
                dp[i]=z;
                diff=diff-y*z;
                x=x*2;
            }
        }
        for(int i=1;i<k;i++)
            dp[i]=dp[i-1]+dp[i];
        for(int i=0;i<k;i++)
            cout<<a[i]+dp[i]+x2<<" ";
        cout<<endl;
    }
    else
    {
        cout<<"NO\n";
    }

    return 0;
}


#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define pb push_back
#define mp make_pair
#include <ext/pb_ds/assoc_container.hpp>
#include <ext/pb_ds/tree_policy.hpp>
using namespace __gnu_pbds;

#define ordered_set tree<pair<int,int>, null_type,less< pair<int,int> >, rb_tree_tag,tree_order_statistics_node_update>
//find_by_order(k) - k is the kth element of the set
//order_of_key(k) - Number of elements striclty samller than k
void build(ll segt[],ll arr[],ll l,ll r,ll ind)
{
	if(l==r)
	{
		segt[ind]=arr[l];
		return;
	}
	ll mid=l+(r-l)/2;
	build(segt,arr,l,mid,2*ind+1);
	build(segt,arr,mid+1,r,2*ind+2);
	segt[ind]=min(segt[2*ind+1],segt[2*ind+2]);
}
//llim-lower limit of array,rlim-upper limit of array
//l,r- range of query
ll sum(ll segt[],ll llim,ll rlim,ll l,ll r,ll ind)
{
	//cout<<llim<<" "<<rlim<<endl;
	if(l<=llim && rlim<=r)
	{
		//cout<<"here "<<segt[ind]<<" "<<ind<<endl;
		return segt[ind];
	}
	if(r<llim || rlim<l)
	{
		return 1e18;
	}
	ll mid=llim+(rlim-llim)/2;
	return min(sum(segt,llim,mid,l,r,2*ind+1),sum(segt,mid+1,rlim,l,r,2*ind+2));
}
void update(ll segt[],ll llim,ll rlim,ll diff,ll upind,ll ind)
{
	if(upind<llim || upind>rlim)
		return;
	segt[ind]=min(segt[ind],diff);
	if(llim==rlim)
	{
		segt[ind]=diff;
		return;
	}
	if(llim!=rlim)
	{
		ll mid=llim+(rlim-llim)/2;
		update(segt,llim,mid,diff,upind,2*ind+1);
		update(segt,mid+1,rlim,diff,upind,2*ind+2);
	}
}
int main()
{
    ios_base::sync_with_stdio(false);
    cin.tie(NULL);
    ll n,k;
    cin>>n>>k;
    if(k==1)
    {
    	cout<<"YES"<<endl;
    	cout<<n<<endl;
    	return 0;
    }
    ll sum=(k*(k+1))/2;
    if(sum>n)
    {
    //	cout<<"wv"<<endl;
    	cout<<"NO"<<endl;
    	return 0;
    }
    ll prod=1;
    int flag=0;
    for(int i=0;i<k;i++)
    {
    	if(prod>n)
    	{
    		flag=1;
    		break;
    	}
    	prod*=2;
    }
    if(prod>n)
    {
    	flag=1;
    }
    prod--;
    ll t=1;
    //sum+=(t-1)*k;
    //prod*=(t-1);
   // cout<<"wv"<<endl;
    if(flag==0)
	{
		t=max((ll)2,(ll)n/prod-100);
		//t=2;
		if(t>2)
		{
			sum+=(t-1)*k;
			prod*=(t-1);
		}
	//	cout<<t<<" "<<sum<<" "<<prod<<endl;
	    while(1)
	    {
	    	//cout<<sum<<" "<<prod<<endl;
	    	sum+=k;
	    	prod/=(t-1);
	    	prod*=t;
	    	if(sum<=n && n<=prod)
	    	{
	    		flag=1;
	    		break;
	    	}
	    	if(sum>n)
	    	{
	    	//	cout<<"wfw "<<sum<<" "<<n<<endl;
	    		flag=0;
	    		break;
	    	}
	    	t++;
	    //	cout<<"hey"<<endl;
	   	}
	}
	if(flag==0)
	{
		cout<<"NO"<<endl;
		return 0;
	}
	cout<<"YES"<<endl;
	ll ans[k];
	ans[0]=t;
	//cout<<t<<endl;
	ll last=t+k-1;
	ll sum1=(last*(last+1))/2-(t*(t-1))/2;
	//cout<<sum1<<endl;
	if(sum1==n)
	{
		cout<<t<<" ";
		for(int i=1;i<k;i++)
		{
			ans[i]=t+i;
			cout<<ans[i]<<" ";
		}
		cout<<endl;
		return 0;
	}
	ll req=n;
	ll temp=t;
	ll curr=1;
	while(1)
	{
		ll just=ans[curr-1]*2;
		//cout<<just<<endl;
		ll mid=((just+k-curr-1)*(just+k-curr))/2-((just)*(just-1))/2;
		//cout<<mid<<endl;
		if(mid+temp>=n)
			break;
		else if(mid+temp<n)
		{
			temp+=just;
			ans[curr]=just;
			curr++;
		}
	}
	//cout<<"wf"<<endl;
	//cout<<curr<<" "<<temp<<endl;
	for(int i=curr;i<k;i++)
	{
		ans[i]=ans[i-1]+1;
	}
	//cout<<ans[5]<<endl;
	ll rem=k-curr;
	ll sum2=(ans[k-1]*(ans[k-1]+1))/2-(ans[curr-1]*(ans[curr-1]+1))/2;
	//cout<<sum2<<" "<<n-temp<<endl;
	ll add=(n-temp-sum2)/rem;
	ll addmore=(n-temp-sum2)%rem;
	int j=1;
	for(int i=k-1;i>=curr;i--)
	{
		ans[i]+=add;
		if(j<=addmore)
			ans[i]++;
		j++;
	}
	for(int i=0;i<k;i++)
	{
		cout<<ans[i]<<" ";
	}
	cout<<endl;
}