#include <bits/stdc++.h>
using namespace std;
const long long maxn = 100005;
long long n, s, fa[maxn], hsh[maxn], ans, dep[maxn], siz[maxn];
bool vis[maxn];
vector<long long> a;
bool check(long long k) {
  long long sum = 1, de = 1, now = 1, kp = 1;
  while (now <= n) {
    if (now + kp * k > n) break;
    now += kp * k, de++, kp *= k;
    sum += de * kp;
  }
  sum += (n - now) * (de + 1);
  if (s < sum || s > (1 + n) * n / 2) return 0;
  memset(vis, 0, sizeof(vis));
  memset(siz, 0, sizeof(siz));
  fa[1] = 0, dep[1] = 1;
  for (long long i = 2; i <= n; i++) {
    fa[i] = (long long)floor(1.0 * (i - 2) / k) + 1;
    dep[i] = dep[fa[i]] + 1, vis[fa[i]] = 1, siz[fa[i]]++;
  }
  a.clear();
  for (long long i = 1; i <= n; i++)
    if (!vis[i]) a.push_back(i);
  a.pop_back();
  long long nows = n;
  long long x = 0;
  while (sum < s) {
    if (x >= a.size()) printf("fk\n");
    long long p = a[x];
    x++;
    if (sum + dep[nows] + 1 - dep[p] <= s) {
      sum += dep[nows] + 1 - dep[p];
      siz[fa[p]]--;
      if (siz[fa[p]] == 0) a.push_back(fa[p]);
      fa[p] = nows, dep[p] = dep[nows] + 1, siz[nows]++, nows = p;
    } else {
      for (long long i = 1; i <= n; i++)
        if (dep[i] + 1 - dep[p] + sum == s && siz[i] + 1 <= k && i != p) {
          sum = s, fa[p] = i, siz[i]++;
          break;
        }
    }
  }
  return 1;
}
signed main() {
  scanf("%lld%lld", &n, &s);
  check(10);
  long long l = 1, r = n;
  while (l <= r) {
    long long mid = (l + r) >> 1;
    if (check(mid))
      r = mid - 1, ans = mid;
    else
      l = mid + 1;
  }
  if (ans == 0)
    printf("No\n");
  else {
    printf("Yes\n");
    check(ans);
    for (long long i = 2; i <= n; i++) printf("%lld ", fa[i]);
    puts("");
  }
  return 0;
}
