#include #include #include #include #define rep(i,a,b) for(int i=(a);i<(b);i++) #define rrep(i,a,b) for(int i=(b)-1;i>=(a);i--) #define all(x) begin(x),end(x) #define sz(x) (int)(x).size() using namespace std; using namespace atcoder; using ll=long long; using ld=long double; using vll=vector; using vvll=vector; using vi=vector; using vvi=vector; using pll=pair; using pi=pair; // using mint=modint998244353; // using mint2=static_modint<2>; // using BoostPoint=boost::polygon::point_data; // using Voronoi=boost::polygon::voronoi_diagram; int main() { ios::sync_with_stdio(false); cin.tie(nullptr); ll N,K; cin>>N>>K; ll L=N*(N+1)*(N+2)/6,U=N*(N+1)*(2*N+1)/6; if(KU){ cout<<"No\n"; return 0; } vll Q(N); bool ok=false; if(N<4){ //全探索 iota(all(Q),1); do{ ll inner=0; rep(i,1,N+1)inner+=i*Q[i-1]; if(inner==K){ ok=true; break; } }while(next_permutation(all(Q))); }else{ //確実にできる ll l=0,r=N-1; for(ll n=N;n>4;--n){ ll prevU=n*(n-1)*(2*n-1)/6,add=n*(n+1)/2; if(K<=prevU+add){ Q[l]=n; l++; K-=add; }else{ Q[r]=n; r--; K-=n*n; } } vll v={1,2,3,4}; do{ ll inner=v[0]+2*v[1]+3*v[2]+4*v[3]; if(inner==K){ ok=true; Q[l]=v[0],Q[l+1]=v[1],Q[l+2]=v[2],Q[l+3]=v[3]; break; } }while(next_permutation(all(v))); } if(ok){ cout<<"Yes\n"; rep(i,0,N){ if(i)cout<<' '; cout<