#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int mod=998244353;
const int N=2026;
int dp[2050];
int dp2[2050][2050];
int ans1[2050],ans2[2050];
ll ans;
int n,k;
void add(int &u,int v){u+=v;u-=(u>=mod)*mod;}
int calc(vector<int>p){
vector<int>q;
for(int t=1;t<=k-2;t++){
int sum=0;
for(auto x:p) sum+=x;
if(sum>n) return -1;
q.clear();
for(int i=(int)p.size()-1;i>=0;i--){
while(p[i]--) q.emplace_back(i+1);
}
p=q;
}
ll sum=0;
for(int i=(int)p.size()-1;i>=0;i--) sum+=p[i]*(i+1);
if(sum>n) return -1;
return sum;
}
vector<int>g;
int num=0;
void dfs(int u,int la){
// num++;
// if(num%1000==0) cerr<<num<<"\n";
g.emplace_back(0);
for(int i=1;i<=la;i++){
g[u]=i;
if(i!=1||u!=0){
int tmp=calc(g);
if(tmp==-1) break;
ans++;
}
dfs(u+1,i);
}
g.pop_back();
}
int main(){
// freopen("test.in","r",stdin);
// freopen("test.out","w",stdout);
ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
cin>>n>>k;
if(k==1){
dp[0]=1;
for(int i=1;i<=N;i++){
for(int j=N;j>=0;j--){
for(int k=i;k<=j;k+=i) add(dp[j],dp[j-k]);
}
}
ans1[0]=1;
for(int i=1;i<=N;i++) ans1[i]=(ans1[i-1]+dp[i])%mod;
}
if(k==2){
dp2[0][N]=1;
for(int i=1;i<=N;i++){
int d=N/i,_d=(i==1?N:N/(i-1));
for(int j=N;j>=0;j--){
for(int k=_d-1;k>=0;k--) add(dp2[j][k],dp2[j][k+1]);
}
for(int j=N;j>=0;j--){
for(int k=0;k<=_d;k++) dp2[j][k]=0;
for(int k=i,p=1;k<=j&&p<=d;k+=i,p++) dp2[j][p]=dp2[j-k][p],add(ans2[j],dp2[j][p]);
}
}
ans2[0]=1;
for(int i=1;i<=N;i++) add(ans2[i],ans2[i-1]);
}
if(k>=3) dfs(0,100);
if(k==1){cout<<(ans1[n]-1+mod)%mod<<"\n";return 0;}
if(k==2){cout<<(ans2[n]-1+mod)%mod<<"\n";return 0;}
if(k<=12) cout<<(ans+1)%mod<<"\n";
else cout<<"1\n";
cerr<<clock()*1.0/CLOCKS_PER_SEC<<"\n";
return 0;
}