#include #include using namespace std; const int N = 2000010, MOD = 1e9 + 7; int n, m, fac[N], ifac[N], inv[N]; void Init() { fac[0] = ifac[0] = 1; fac[1] = ifac[1] = inv[1] = 1; for (int i = 2; i < N; ++i) { fac[i] = 1LL * fac[i - 1] * i % MOD; inv[i] = 1LL * (MOD - MOD / i) * inv[MOD % i] % MOD; ifac[i] = 1LL * ifac[i - 1] * inv[i] % MOD; } } int C(int x, int y) { if (y < 0 || x < y) return 0; return 1LL * fac[x] * ifac[y] % MOD * ifac[x - y] % MOD; } int main() { // freopen("random.in", "r", stdin); // freopen("random.out", "w", stdout); Init(); scanf("%d%d", &n, &m); if (n == 1) puts("1"); else { int ans = 0; for (int up = 0; up <= m; ++up) { // 正 int down = m - up; int delta = ((down - up + 2 * n) % (2 * n) + (2 * n)) % (2 * n); // 位移 if (delta == 0 || delta == 2 * n - 1) { (ans += C(m, up)) %= MOD; } } printf("%d\n", ans); } return 0; }