#include <bits/stdc++.h>
using namespace std;
int n;
const int maxn = 1e5 + 10;
long long s, cnt[maxn], siz[maxn];
int id, ind[maxn];
bool check(int mid) {
  long long a = 1, res_s = s;
  int d = 1, res_n = n;
  while (res_n) {
    a = min((long long)res_n, a);
    res_n -= a;
    res_s -= a * d;
    ++d;
    a = a * mid;
  }
  return (res_s >= 0);
}
void solve(int k) {
  long long res = 1ll * (n + 1) * n / 2 - s;
  int d = 1, cur = n;
  siz[1] = cnt[1] = 1;
  for (int i = 2; i <= n; ++i) cnt[i] = 1, siz[i] = siz[i - 1] * k;
  while (res) {
    while (cnt[d] == siz[d] && d <= cur) ++d;
    if (d == cur + 1) break;
    int jp = min(res, (long long)(cur - d));
    ++cnt[cur - jp];
    --cur;
    res -= jp;
  }
  ind[0] = ++id;
  for (int i = 2; i <= cur; ++i) {
    for (int j = 0; j < cnt[i]; ++j) cout << ind[j / k] << ' ';
    for (int j = 0; j < cnt[i]; ++j) ind[j] = ++id;
  }
}
int main() {
  ios::sync_with_stdio(false);
  cin.tie(0);
  cin >> n >> s;
  if (1ll * (n + 1) * n / 2 < s) {
    cout << "No" << endl;
    return 0;
  }
  int l = 1, r = n - 1;
  while (l <= r) {
    int mid = l + r >> 1;
    if (check(mid))
      r = mid - 1;
    else
      l = mid + 1;
  }
  if (l == n) {
    cout << "No" << endl;
    return 0;
  }
  cout << "Yes" << endl;
  solve(l);
  return 0;
}
