#include <bits/stdc++.h>
using namespace std;
typedef set<int, bool (*)(int, int)> sic;
typedef set<long long int, bool (*)(long long int, long long int)> slc;
string out;
long long int T;
int A[500000];
long long int N, S, B;
long long int nv(int b, long long int n) {
  if (b == 1) return ((n) * ((n) + 1) / 2);
  long long int s = 0, i = 1, m = 1;
  while (n > 0) s += i * min(n, m), n -= m, i++, m *= b;
  return s;
}
void build(long long int n, int d, long long int s, long long int mx) {
  if (!n) return;
  mx = min(mx, n);
  for (int i = (int)(mx); i >= (int)(1); i--) {
    long long int u = ((n - i + 1) * ((n - i + 1) + 1) / 2) + i - 1;
    long long int l = (n % i) * nv(B, n / i + 1) + (i - n % i) * nv(B, n / i);
    if (l <= s && s <= u) {
      A[d] = i;
      build(n - i, d + 1, s - n, B * i);
      return;
    }
  }
}
void process() {
  cin >> N, cin >> S;
  if (S < 2 * N - 1 || S > nv(1, N)) {
    out += "No\n";
    return;
  }
  do B++;
  while (nv(B, N) > S);
  build(N, 1, S, 1);
  out += "Yes\n";
  int pgs = 1;
  for (int i = (int)(2); i <= (int)(N); i++) {
    if (!A[i]) break;
    for (int j = (int)(0); j <= (int)(A[i] - 1); j++)
      out += to_string(pgs + j / B) + " ";
    pgs += A[i - 1];
  }
  out[out.length() - 1] = '\n';
}
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  T = 1;
  for (int t = (int)(1); t <= (int)(T); t++) process();
  cout << out;
  return 0;
}
