#include <bits/stdc++.h>
std::unordered_map<long long, long long> mp;
std::multiset<long long> s;
int main() {
  long long n, k;
  std::cin >> n >> k;
  int pow = 0;
  while (n > 0) {
    if (n % 2 == 1) {
      s.insert(pow);
      mp[pow]++;
    }
    n /= 2;
    pow++;
  }
  if (s.size() > k)
    std::cout << "No\n";
  else {
    while (s.size() < k) {
      long long cur = *(--s.end());
      if (mp[cur] + s.size() > k)
        break;
      else {
        int temp = mp[cur];
        mp[(cur)-1] += 2 * temp;
        mp.erase(cur);
        while (temp--) {
          s.erase(--s.end());
          s.insert(cur - 1);
          s.insert(cur - 1);
        }
      }
    }
    while (s.size() < k) {
      int cur = *s.begin();
      s.erase(s.begin());
      s.insert(cur - 1);
      s.insert(cur - 1);
    }
    std::cout << "Yes\n";
    while (s.size() > 0) {
      std::cout << *(--s.end()) << " ";
      s.erase(--s.end());
    }
  }
  return 0;
}
