#include <bits/stdc++.h>
using namespace std;
map<long long int, long long int> mp;
int main() {
  priority_queue<long long int> pq;
  long long int n, k;
  scanf("%lld %lld", &n, &k);
  if (n == 1) {
    pq.push(0);
    mp[0]++;
  } else {
    string bitString;
    while (n > 0) {
      long long int rem = n % 2;
      bitString = bitString + (char)(rem + '0');
      n /= 2;
    }
    for (long long int i = 0; i < bitString.size(); i++) {
      if (bitString[i] == '1') {
        mp[i]++;
        pq.push(i);
      }
    }
  }
  if (pq.size() > k) {
    printf("No\n");
    return 0;
  } else {
    k -= pq.size();
    while (k > 0) {
      long long int temp = pq.top();
      if (mp[temp] > k) break;
      pq.pop();
      mp[temp]--;
      temp--;
      pq.push(temp);
      pq.push(temp);
      mp[temp] += 2;
      k--;
    }
    vector<long long int> ans;
    while (!pq.empty()) {
      ans.push_back(pq.top());
      pq.pop();
    }
    while (k) {
      long long int temp = ans.back();
      temp--;
      ans.pop_back();
      ans.push_back(temp);
      ans.push_back(temp);
      k--;
    }
    printf("Yes\n");
    for (long long int i = 0; i < ans.size(); i++) {
      printf("%lld ", ans[i]);
    }
    printf("\n");
  }
}
