const
_m=10000;
_s='000000000000';
_n=4;
type
bigNum=record
len:integer;
data:array[1..50]of dword;
end;
var
f:array[1..15000,0..512]of bigNum;
i,j,k:integer;
maxNum,lenK:integer;
k_,len:integer;
ans:bigNum;
procedure plus(var a,b:bigNum);
var
i:integer;
begin
if a.len<b.len then a.len:=b.len;
for i:=1 to a.len do a.data[i]:=a.data[i]+b.data[i];
for i:=1 to a.len do
begin
inc(a.data[i+1],a.data[i] div _m);
a.data[i]:=a.data[i] mod _m;
end;
if a.data[a.len+1]>0 then inc(a.len);
end;
procedure set_number(var a:bigNum;x:integer);
begin
a.len:=1;
a.data[1]:=x;
end;
function repr(x:integer):string;
var
res:string;
begin
str(x,res);
exit(copy(_s,1,_n-length(res))+res);
end;
procedure print(a:bigNum);
var
i:integer;
begin
write(a.data[a.len]);
for i:=a.len-1 downto 1 do write(repr(a.data[i]));
writeln;
end;
begin
readln(k_,len);
maxNum:=1 shl k_-1;
lenK:=len div k_;
fillchar(f,sizeof(f),0);
for i:=0 to maxNum do
begin
f[1,i].len:=1;
f[1,i].data[1]:=1;
end;
fillchar(ans,sizeof(ans),0);
set_number(ans,0);
for i:=2 to lenK+1 do
begin
for j:=0 to maxNum do
for k:=j+1 to maxNum do
plus(f[i,j],f[i-1,k]);
if i>2 then plus(ans,f[i,0]);
end;
if len mod k_<>0 then
for i:=1 to 1 shl (len mod k_)-1 do plus(ans,f[lenK+1,i]);
print(ans);
end.