#include <bits/stdc++.h>
using namespace std;
struct cmp {
  bool operator()(const pair<long long, long long> &a,
                  const pair<long long, long long> &b) {
    return a.first > b.first;
  }
};
priority_queue<pair<long long, long long> > q;
priority_queue<pair<long long, long long>, vector<pair<long long, long long> >,
               cmp>
    q2;
vector<pair<long long, long long> > v;
int main() {
  long long sum;
  int n;
  scanf("%I64d %d", &sum, &n);
  bitset<64> b(sum);
  int rem = n - b.count();
  if (rem < 0) {
    puts("No");
    return 0;
  }
  for (__typeof(64) i = 0; i < 64; ++i)
    if (b[i]) q.emplace(i, 1);
  pair<long long, long long> p, pre;
  while (1) {
    if (q.top().second > rem) break;
    p = q.top(), q.pop();
    if (q.empty() || q.top().first != p.first - 1)
      pre = make_pair(p.first - 1, 0);
    else
      pre = q.top(), q.pop();
    pre.second += 2 * p.second;
    rem -= p.second;
    q.emplace(pre);
  }
  while (!q.empty()) p = q.top(), q.pop(), v.emplace_back(p);
  if (rem) {
    v.pop_back();
    q2.emplace(p);
    while (1) {
      p = q2.top(), q2.pop();
      rem--;
      if (p.second > 1) q2.emplace(p.first, p.second - 1);
      q2.emplace(p.first - 1, 2);
      if (rem == 0) break;
    }
    while (!q2.empty()) v.emplace_back(q2.top()), q2.pop();
  }
  sort(v.begin(), v.end());
  puts("Yes");
  while (!v.empty()) {
    while (v.back().second) printf("%I64d ", v.back().first), v.back().second--;
    v.pop_back();
  }
  return 0;
}
