import java.util.Scanner;
import java.math.BigInteger;
public class Main
{
public static void main
(String[] args
) {
Scanner in
= new Scanner
(System.
in); int m = in.nextInt();
int n = in.nextInt();
for(int i = 0; i <= m; ++i)
{
for(int j = 0; j <= n; ++j)
{
}
}
for(int i = 1; i <= m; ++i)
{
for(int j = 1; j <= n; ++j)
{
dp[i][j] = dp[i-1][j].add(dp[i][j-1]);
}
}
for(int i = 0; i <= m; ++i)
{
for(int j = 0; j <= n; ++j)
{
}
}
System.
out.
println(dfs
(dp, m, n
)); }
{
if(x
== 0 || y
== 0 || !dp
[x
][y
].
equals(BigInteger.
ZERO)) return dp[x][y];
return dp[x][y] = dfs(dp, x-1, y).add(dfs(dp, x, y-1));
}
}
aW1wb3J0IGphdmEudXRpbC5TY2FubmVyOwppbXBvcnQgamF2YS5tYXRoLkJpZ0ludGVnZXI7CnB1YmxpYyBjbGFzcyBNYWluCnsKICAgIHB1YmxpYyBzdGF0aWMgdm9pZCBtYWluKFN0cmluZ1tdIGFyZ3MpCiAgICB7CiAgICAgICAgU2Nhbm5lciBpbiA9IG5ldyBTY2FubmVyKFN5c3RlbS5pbik7CiAgICAgICAgaW50IG0gPSBpbi5uZXh0SW50KCk7CiAgICAgICAgaW50IG4gPSBpbi5uZXh0SW50KCk7CiAgICAgICAgCiAgICAgICAgQmlnSW50ZWdlciBkcFtdW10gPSBuZXcgQmlnSW50ZWdlclttKzFdW24rMV07CiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8PSBtOyArK2kpCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDw9IG47ICsraikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZHBbaV1bal0gPSBCaWdJbnRlZ2VyLlpFUk87CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZHBbMV1bMV0gPSBCaWdJbnRlZ2VyLk9ORTsKICAgICAgICAKICAgICAgICBmb3IoaW50IGkgPSAxOyBpIDw9IG07ICsraSkKICAgICAgICB7CiAgICAgICAgICAgIGZvcihpbnQgaiA9IDE7IGogPD0gbjsgKytqKQogICAgICAgICAgICB7CiAgICAgICAgICAgICAgICBpZihkcFtpXVtqXS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkKICAgICAgICAgICAgICAgICAgICBkcFtpXVtqXSA9IGRwW2ktMV1bal0uYWRkKGRwW2ldW2otMV0pOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIFN5c3RlbS5vdXQucHJpbnRsbihkcFttXVtuXSk7CiAgICAgICAgCiAgICAgICAgZm9yKGludCBpID0gMDsgaSA8PSBtOyArK2kpCiAgICAgICAgewogICAgICAgICAgICBmb3IoaW50IGogPSAwOyBqIDw9IG47ICsraikKICAgICAgICAgICAgewogICAgICAgICAgICAgICAgZHBbaV1bal0gPSBCaWdJbnRlZ2VyLlpFUk87CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZHBbMV1bMV0gPSBCaWdJbnRlZ2VyLk9ORTsKICAgICAgICBTeXN0ZW0ub3V0LnByaW50bG4oZGZzKGRwLCBtLCBuKSk7CiAgICB9CiAgICAKICAgIHB1YmxpYyBzdGF0aWMgQmlnSW50ZWdlciBkZnMoQmlnSW50ZWdlciBkcFtdW10sIGludCB4LCBpbnQgeSkKICAgIHsKICAgICAgICBpZih4ID09IDAgfHwgeSA9PSAwIHx8ICFkcFt4XVt5XS5lcXVhbHMoQmlnSW50ZWdlci5aRVJPKSkKICAgICAgICAgICAgcmV0dXJuIGRwW3hdW3ldOwogICAgICAgIHJldHVybiBkcFt4XVt5XSA9IGRmcyhkcCwgeC0xLCB5KS5hZGQoZGZzKGRwLCB4LCB5LTEpKTsKICAgIH0KfQ==