#include<stdio.h>
#include<iostream>
using namespace std;
int n,m;
long long f[10][60];
long long dfs(int k,int i){
if(i>n)return 1;
if(f[k][i]!=-1)return f[k][i];
long long tmp=0;
if(k==m-1){
tmp+=dfs(0,i+1);
}
else{
tmp+=dfs(0,i+1);
tmp+=dfs(k+1,i+1);
}
f[k][i]=tmp;
return tmp;
}
int main(){
freopen("nuclear.in","r",stdin);
freopen("nuclear.out","w",stdout);
cin>>n>>m;
memset(f,-1,sizeof(f));
cout<<dfs(0,1);
}
program he;
var n,m:integer;
b:array[1..50,0..5,0..1] of int64;
function find(i,f,a:integer):int64;
var t:integer;
begin
if b[i,f,a]<>0 then exit(b[i,f,a]);
t:=f;
if a=1 then inc(f) else f:=0;
if f=m then exit(0);
if i>=n then begin exit(1); end;
find:=find(i+1,f,0) + find(i+1,f,1);
b[i,t,a]:=find;
end;
begin
readln(n,m);
fillchar(b,sizeof(b),0);
writeln(find(1,0,0)+find(1,0,1));
end.