'''
问题描述
　　如果一个序列的奇数项都比前一项大，偶数项都比前一项小，则称为一个摆动序列。即 a[2i]<a[2i-1], a[2i+1]>a[2i]。
　　小明想知道，长度为 m，每个数都是 1 到 n 之间的正整数的摆动序列一共有多少个。
输入格式
　　输入一行包含两个整数 m，n。
输出格式
　　输出一个整数，表示答案。答案可能很大，请输出答案除以10000的余数。
样例输入
3 4
样例输出
14
样例说明
　　以下是符合要求的摆动序列：
　　2 1 2
　　2 1 3
　　2 1 4`
　　3 1 2
　　3 1 3
　　3 1 4
　　3 2 3
　　3 2 4
　　4 1 2
　　4 1 3
　　4 1 4
　　4 2 3
　　4 2 4
　　4 3 4
评测用例规模与约定
　　对于 20% 的评测用例，1 <= n, m <= 5；
　　对于 50% 的评测用例，1 <= n, m <= 10；
　　对于 80% 的评测用例，1 <= n, m <= 100；
　　对于所有评测用例，1 <= n, m <= 1000。
'''

'''
思路:
计算的时候先从第一行开始，为第一行进行一个初始化，初始化为下一行可以选择的值的数目，即当前所能组成的摆动数列的个数。我们初始化dp[1][i] = n - i + 1;

第一行中，令 d[1][j]为：第1个数选择大于等于 j的数的方案总数。

从第二行开始：

​ 奇数行中，令 d[i][j]为：第i个数选择大于等于j的数时的方案总数。
​ 偶数行中，令 d[i][j]为：第i个数选择小于等于j的数时的方案总数。

即从第二行开始，如果行数为偶数行，那么我们当前可能的数目为：dp[i][j] = (dp[i-1][j+1] + dp[i][j-1]) % 10000;,如果为奇数行则：dp[i][j] = (dp[i-1][j-1] + dp[i][j+1]) % 10000;。

​ 然后这样的话，如果我们总的长度为奇数的话，那么就是dp[m][1],如果是偶数，则为dp[m][n]。
'''
ans = 0
m, n = map(int, input().split())
dp = [[0 for _ in range(1024)] for _ in range(1024)]

for i in range(1, n + 1):
    dp[1][i] = n - i + 1

for i in range(2, m+1):
    if i & 1:
        for j in range(n , 0, -1):
            dp[i][j] = (dp[i - 1][j - 1] + dp[i][j + 1]) % 10000

    else:
        for j in range(1, n+1):
            dp[i][j] = (dp[i - 1][j + 1] + dp[i][j - 1]) % 10000

if m & 1:
    ans = dp[m][1]
else:
    ans = dp[m][n]
print(ans)