#include <bits/stdc++.h>
using namespace std;
priority_queue<int> q;
priority_queue<int, vector<int>, greater<int> > pq;
map<int, int> mp;
long long n, k;
int Num[20000];
int get_Num() {
  int cnt = 0, ls = 0;
  while (n) {
    Num[ls++] = n % 2;
    n /= 2;
  }
  for (int i = 0; i < ls; i++) {
    if (Num[i]) {
      cnt++;
      mp[i] = 1;
      q.push(i);
    }
  }
  return cnt;
}
void solve() {
  mp.clear();
  while (!q.empty()) q.pop();
  while (!pq.empty()) pq.pop();
  int ls = get_Num();
  if (ls > k) {
    puts("No");
    return;
  }
  puts("Yes");
  int flag = 1;
  int ct;
  while (ls < k) {
    if (flag == 1) {
      ct = q.top();
      if (mp[ct] <= k - ls) {
        mp[ct]--;
        ct -= 1;
        mp[ct] += 2;
        q.pop();
        q.push(ct);
        q.push(ct);
      } else {
        while (!q.empty()) {
          pq.push(q.top());
          q.pop();
        }
        ct = pq.top();
        pq.pop();
        pq.push(ct - 1);
        pq.push(ct - 1);
        flag = 0;
      }
    } else {
      ct = pq.top();
      pq.pop();
      pq.push(ct - 1);
      pq.push(ct - 1);
      flag = 0;
    }
    ls++;
  }
  int cnt = 0;
  while (!pq.empty()) {
    q.push(pq.top());
    pq.pop();
  }
  while (!q.empty()) {
    if (cnt) printf(" ");
    cnt++;
    printf("%d", q.top());
    q.pop();
  }
  cout << endl;
}
int main() {
  cin >> n >> k;
  solve();
  return 0;
}
