#include <bits/stdc++.h>
using namespace std;
priority_queue<long long int> pq, pq1;
priority_queue<long long int, vector<long long int>, greater<long long int> >
    pq2;
void p(long long int n) {
  long long int a = 0;
  while (n) {
    if (n & 1) {
      pq.push(a);
      pq1.push(a);
    }
    n = n / 2;
    a = a + 1;
  }
}
int main() {
  long long int n, k, j, l;
  cin >> n >> k;
  p(n);
  if (pq.size() > k)
    printf("No\n");
  else {
    while (pq.size() != k) {
      j = pq.top();
      pq.pop();
      j = j - 1;
      pq.push(j);
      pq.push(j);
    }
    l = pq.top();
    while (pq1.top() != l) {
      j = pq1.top();
      pq1.pop();
      j = j - 1;
      pq1.push(j);
      pq1.push(j);
    }
    while (!pq1.empty()) {
      pq2.push(pq1.top());
      pq1.pop();
    }
    while (pq2.size() != k) {
      j = pq2.top();
      pq2.pop();
      j = j - 1;
      pq2.push(j);
      pq2.push(j);
    }
    while (!pq2.empty()) {
      pq1.push(pq2.top());
      pq2.pop();
    }
    printf("Yes\n");
    cout << pq1.top();
    pq1.pop();
    while (!pq1.empty()) {
      cout << " " << pq1.top();
      pq1.pop();
    }
  }
  return 0;
}
