#include <bits/stdc++.h>   using namespace std;   int const N = 3e5 + 10, oo = 1e9, M = 64;   long long const OO = 1e18;   int mod = oo + 7;   double const eps = 1e-4, PI = acos(-1);   int n, k, in[N];   int cc = 0, m = 0, cnt = 0;   vector<int> dv[N];   bool brute(int i, int h) {     if (h > k) return 0;     if (i == m + 1) return h == k;     if (h == k) return 1;     int y = 0;     for (auto v : dv[i])       if (in[v]) y++;     in[i] = 1;     cnt++;     if (brute(i + 1, h + y)) return 1;     cnt--;     in[i] = 0;     if (brute(i + 1, h)) return 1;     return 0;   }   int main() {     scanf( %d%d , &n, &k);     int all = 0;     for (int i = 1; i <= n; i++)       for (int j = i + i; j <= n; j += i) all++, dv[j].push_back(i);     if (all < k) {       puts( No );       return 0;     }     for (int i = 1; i <= n && cc < k; i++) {       cc += dv[i].size();       in[i] = 1;       cnt++;       m++;     }     if (m < 10000) {       cnt = 0;       memset(in, 0, sizeof in);       brute(1, 0);     } else       for (int i = m; cc != k; i--)         if ((int)dv[i].size() == 1) cc--, in[i] = 0, cnt--;     puts( Yes );     printf( %d n , cnt);     for (int i = 1; i <= m; i++)       if (in[i]) printf( %d  , i);     return 0;   }   