#include <iostream>
#include <cstdio>
#include <cstring>
#include <string>
#include <cmath>
using namespace std;
long long n;
long long k;
long long ct[200005];
long long fac[25];
int main() {
fac[0]=1;
for(int i=1;i<=22;i++)
{
fac[i]=fac[i-1]*2;
}
while(~scanf("%lld%lld",&n,&k))
{
memset(ct,0,sizeof(ct));
long long tp=n;
int sta=100000;
long long cnt=0;
while(tp>0)
{
int id=tp%2;
ct[sta]+=id;
cnt+=id;
sta++;
tp/=2;
}
if(k<cnt)
printf("No\n");
else
{
printf("Yes\n");
sta--;
k-=cnt;
for(int i=sta;i>=0;i--)
{
long long cur=min(k,ct[i]);
ct[i]-=cur;
ct[i-1]+=cur*2;
k-=cur;
if(k==0)
break;
}
for(int i=200000;i>=0;i--)
if(ct[i]!=0)
{
sta=i;break;
}
int sed=ct[sta-1]/2;
ct[sta]+=sed;
ct[sta-1]-=sed*2;
k+=sed;
int end;
for(int i=0;i<=200000;i++){
if(ct[i]!=0)
{
end=i;break;
}
}
//cout<<end<<endl;
for(int i=end;i>=0;i--)
{
if(k==0)
break;
if(i>=20)
{
ct[i]--;
ct[i-1]+=2;
k--;
}
else
{
long long cap=fac[i]-1;
//cout<<cap<<endl;
long long tp=(k/cap);
if(tp*cap!=k)
tp++;
ct[i]-=tp;
ct[i-1]+=tp*2;
k-=tp;
}
if(k==0)
break;
}
for(int i=200000;i>=0;i--)
{
for(long long j=0;j<ct[i];j++)
{
printf("%d ",i-100000);
}
}
printf("\n");
}
}
return 0;
}