/*
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
typedef struct a_
{
char work[100];
int time;
} student;
int main()
{
int n, i, j, a, b, c, min;
student st[101], temp;
scanf("%d", &n);
for(i=1; i<=n; i++)
{
scanf("%s %d %d %d", st[i].work, &a, &b, &c);
st[i].time=c+b*100+a*10000;
}
for(i=1; i<n; i++)
{
for(j=1; j<=n-i; j++)
{
if(st[j].time>st[j+1].time)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
else if(st[j].time==st[j+1].time)
{
if(strcmp(st[j].work, st[j+1].work)==1)
{
temp=st[j];
st[j]=st[j+1];
st[j+1]=temp;
}
}
}
}
}
for(i=1; i<=n; i++)
{
printf("%s\n", st[i].work);
}
return 0;
}
*/
/*
#include <stdio.h>
int memo[201]={};
int fib(int n)
{
if(n == 1 || n == 2)
return memo[n]=1;
if(memo[n]==0)
{
return memo[n]=(fib(n-1)+fib(n-2))%10009;
}
else
{
return memo[n];
}
}
int main()
{
int n;
scanf("%d", &n);
printf("%d", fib(n));
}
*/
#include <stdio.h>
int memo[51][51]={};
int p(int n, int n1)
{
if(n==1 || n1==1) return memo[n][n1]=1;
if(memo[n][n1]==0)
return memo[n][n1]=(p(n-1, n1)+p(n, n1-1))%100000000;
else
return memo[n][n1];
}
int main()
{
int n, n1;
scanf("%d %d", &n, &n1);
printf("%d", p(n, n1));
}