#include <bits/stdc++.h>
using namespace std;
const int N = 1e5 + 5;
int n, fa[N], dept[N];
long long s;
bool vis[N];
inline void solve(const int& x) {
  int tot = 1;
  queue<int> q;
  q.push(1);
  while (!q.empty()) {
    int p = q.front();
    q.pop(), dept[p] = dept[fa[p]] + 1;
    for (register int i = 1; i <= x && tot < n; ++i) q.push(++tot), fa[tot] = p;
  }
}
inline void check(const int& x) {
  long long cnt = 1, mul = 1, dep = 1;
  long long sum = 1;
  while (cnt < n) {
    mul *= x, cnt += mul, ++dep, sum += (long long)dep * mul;
  }
  sum -= (long long)dep * (cnt - n);
  if (sum > s) return;
  puts("Yes");
  solve(x);
  int p = cnt - mul + 1, pre = p;
  while (p) vis[p] = 1, p = fa[p];
  p = pre;
  queue<int> q;
  for (register int i = n; i; --i)
    if (!vis[i]) q.push(i);
  while (s > sum) {
    p = q.front(), q.pop(), sum -= dept[p];
    fa[p] = pre, dept[p] = dept[fa[p]] + 1, pre = p, sum += dept[p];
  }
  if (sum > s) {
    for (register int i = pre; i; i = fa[i]) {
      if (sum - dept[pre] + dept[i] + 1 == s) {
        fa[pre] = i, sum -= dept[pre], dept[pre] = dept[i] + 1,
        sum += dept[pre];
        break;
      }
    }
  }
  for (register int i = 2; i <= n; ++i) cout << fa[i] << ' ';
  exit(0);
}
int main() {
  cin >> n >> s;
  if (s > (long long)(n + 1) * n / 2) return puts("No"), 0;
  for (register int i = 1; i < n; ++i) check(i);
  return puts("No"), 0;
}
