#include <bits/stdc++.h>
using namespace std;
multiset<int> st;
multiset<int>::reverse_iterator it;
multiset<int>::iterator it2;
map<int, int> mp;
int main() {
  long long n, k, i;
  cin >> n >> k;
  for (i = 0; i < 64; i++) {
    if (n & (long long)1 << i) {
      st.insert(i);
      mp[i]++;
    }
  }
  if (st.size() > k) {
    cout << "NO";
    return 0;
  }
  k -= st.size();
  while (k != 0) {
    it2 = st.end();
    it2--;
    if (mp[*it2] > k) it2 = st.begin();
    mp[*it2]--;
    mp[*it2 - 1] += 2;
    st.insert(*it2 - 1);
    st.insert(*it2 - 1);
    st.erase(it2);
    k--;
  }
  cout << "YES" << endl;
  for (it = st.rbegin(); it != st.rend(); it++) cout << *it << " ";
  return 0;
}
