#include <bits/stdc++.h>
using namespace std;
const int maxn = 1000010;
long long N, S;
long long fa[maxn], q[maxn], d[maxn], head, tail, sz[maxn], son[maxn];
bool check(long long Mid) {
  long long tN = N, now = 1, p = 1, res = 0;
  while (tN) {
    res += min(p, tN) * now;
    if (res > S) return false;
    tN -= min(p, tN);
    p *= Mid;
    now++;
  }
  return true;
}
int main() {
  cin >> N >> S;
  long long Mn = N + N - 1;
  long long Mx = N * (N + 1) / 2;
  if (S < Mn || S > Mx) return puts("NO"), 0;
  long long L = 1, R = N - 1, Mid, res;
  while (L <= R) {
    Mid = (L + R) / 2;
    if (check(Mid))
      res = Mid, R = Mid - 1;
    else
      L = Mid + 1;
  }
  puts("YES");
  for (int i = 1; i <= N; i++) sz[i] = 1;
  long long Now = Mx, D = 2;
  for (int i = N;; i--) {
    if (Now == S) break;
    if (sz[D] == sz[D - 1] * res) D++;
    if (Now - S >= i - D) {
      sz[D]++;
      sz[i]--;
      Now -= (i - D);
    } else {
      sz[i]--;
      sz[i - (Now - S)]++;
      Now = S;
    }
  }
  head = tail = 1;
  q[head] = 1;
  d[1] = 1;
  long long p = 1;
  for (int i = 2; i <= N; i++) {
    if (sz[i] == 0) break;
    L = p + 1;
    R = p + sz[i];
    for (int j = L; j <= R; j++) {
      while (d[q[head]] != i - 1 || son[q[head]] == res) {
        head++;
      }
      fa[j] = q[head];
      son[q[head]]++;
      q[++tail] = j;
      d[j] = i;
    }
    p = R;
  }
  for (int i = 2; i <= N; i++) printf("%lld ", fa[i]);
  return 0;
}
