#include<iostream>
using namespace std;
int dp[210][16];
int main()
{
	int n,k;
	cin>>n>>k;
	for(int i=1;i<=n;i++)
	dp[i][1]=1;//分成一份的时候只有一种情况 
	for(int i=1;i<=n;i++)
	for(int j=2;j<=k;j++)//分成一份的时候跳过,从2开始 
	{
		if(i>=j)dp[i][j]=dp[i-j][j]+dp[i-1][j-1];
		/*k>n情况数肯定是0; 
		当 i>=j时,缩小规模,分成两类讨论:
		1.当至少有一个等于一,我们便可以缩小它的规模,
		变成研究,dp[i-1][j-1]的情况数;
		2. 当所有的都大于等于2,实际上也就等于每一份里面减去一个一,
		而份数不变的情况dp[i-j][j] 
		*/ 
	}
	cout<<dp[n][k]<<endl;
}
/**************************************************************
	Problem: 1857
	User: admin
	Language: C++
	Result: Accepted
	Time:38 ms
	Memory:2088 kb
****************************************************************/