#include <bits/stdc++.h>
using namespace std;
const int maxn = 100010;
int n, dep[maxn], fir[maxn];
long long s;
bool chk(int x) {
  int dep = 1;
  long long cur = 1, sum = cur, ans = 0;
  for (int i = 1; i <= n; i++) {
    if (i <= sum)
      ans += dep;
    else
      sum += (cur *= x), ans += ++dep;
  }
  return ans <= s;
}
long long calc1(long long r, long long dep, long long x, long long prod) {
  long long cur = x, sum = x, ans = 0;
  while (sum < r) {
    ans += dep * cur;
    dep++, cur *= prod, sum += cur;
  }
  ans += 1LL * (r - sum + cur) * dep;
  return ans;
}
long long calc2(long long r, long long dep, long long x, long long prod) {
  if (x >= r) return 1LL * dep * r;
  long long ans = 1LL * x * dep;
  r -= x;
  ans += dep * r + 1LL * r * (r + 1) / 2;
  return ans;
}
int main() {
  scanf("%d %lld", &n, &s);
  if (s < 2 * n - 1) printf("NO\n"), exit(0);
  if (s > 1LL * n * (n + 1) / 2) printf("NO\n"), exit(0);
  if (s == 1LL * n * (n + 1) / 2) {
    printf("YES\n");
    for (int i = 2; i <= n; i++) {
      printf("%d ", i - 1);
    }
    return 0;
  }
  int l = 1, r = n - 1, ans;
  while (l <= r) {
    int mid = (l + r) >> 1;
    chk(mid) ? r = (ans = mid) - 1 : l = mid + 1;
  }
  printf("YES\n");
  int cur_dep = 1;
  long long lst = 1, sum = lst, tot = 0;
  for (int i = 1; i <= n; i++) {
    if (i <= sum) {
      tot += dep[i] = cur_dep;
    } else {
      for (long long j = 1;; j++) {
        long long mn = tot + calc1(n - i + 1, cur_dep + 1, j, ans);
        long long mx = tot + calc2(n - i + 1, cur_dep + 1, j, ans);
        if (mn <= s && s <= mx) {
          lst = j, sum += lst, tot += dep[i] = ++cur_dep;
          break;
        }
      }
    }
  }
  assert(tot == s);
  for (int i = 2, j = 1; i <= n; i++) {
    while (dep[j] < dep[i] - 1 || fir[j] && i - fir[j] >= ans) j++;
    printf("%d ", j);
    if (!fir[j]) fir[j] = i;
  }
  return 0;
}
