#include <bits/stdc++.h>
using namespace std;
long long Compute(long long n, long long k, long long x = 1) {
  long long ans = 0;
  for (long long d = 1; n; x *= k, ++d) {
    long long z = min(x, n);
    ans += d * z;
    n -= z;
  }
  return ans;
}
long long ComputeMinBranchCoefficient(long long n, long long s) {
  long long x = 2 * n - 1, y = (n * (n + 1)) / 2;
  if (s < x || s > y) {
    return -1;
  }
  long long k = 2;
  for (; s < Compute(n, k); ++k)
    ;
  return k;
}
long long BinarySearch(long long n, long long y, long long k, long long s) {
  long long x = 1, ans = min(n, y);
  while (x <= y) {
    long long mid = x + (y - x) / 2;
    if (Compute(n, k, mid) > s) {
      x = mid + 1;
    } else {
      ans = mid, y = mid - 1;
    }
  }
  return ans;
}
int main() {
  long long n, s;
  cin >> n >> s;
  long long k = ComputeMinBranchCoefficient(n, s);
  if (k < 1) {
    printf("No\n");
    return 0;
  }
  vector<long long> d(1);
  d.push_back(1);
  s -= n, --n;
  while (n) {
    long long x = BinarySearch(n, min(k * d.back(), n), k, s);
    d.push_back(x);
    s -= n;
    n -= x;
  }
  printf("Yes\n");
  for (long long i = 2, p = 1; i < d.size(); p += d[i], ++i) {
    long long y = d[i], q = p;
    while (y) {
      long long x = min(k, y);
      y -= x;
      while (x--) {
        printf("%lld ", q);
      }
      --q;
    }
  }
  printf("\n");
  return 0;
}
