import math

n,m = list(map(int, input().split()))



num_b = max([n,m]) #多い方

num_l = min([n,m]) #少ない方

ans = 0

if num_b - num_l >= 2: #差が2以上あると、隣接なしでは並べられない

  ans = 0

elif num_b - num_l == 1:

  #差が1匹の場合

  #多い方が(num_b)!通り、少ない方が(num_l)!通りの並び方なので、その積をとる

  ans = math.factorial(num_b) * math.factorial(num_l) % (10 ** 9 + 7)

else:

  #差が0匹の場合

  #一方を先に並べる。(num_b)!通り。もう一方をまず間に入れる。(num_l - 1)匹選ぶ方法がnum_l通りで並べ方が(num_l - 1)!通り残りを左右のどちらに置くかで2通り

  ans = math.factorial(num_b) * num_l * math.factorial(num_l - 1) * 2 % (10 ** 9 + 7)

  

print(ans)


N,M = list(map(int, input().split()))

MOD = 10**9+7



if abs(N - M) > 1:

    print((0))

    exit()



factorial = [1] * (max(N,M)+1)

for i in range(1,max(N,M)+1):

    factorial[i] = (factorial[i-1]*i) % MOD



if abs(N - M) == 0:

    ans = ((factorial[N]**2) * 2) % MOD

else:

    ans = (factorial[N] * factorial[M]) % MOD

print(ans)
import math

n, m = list(map(int, input().split()))
num_b = max([n, m])  # 多い方
num_l = min([n, m])  # 少ない方
ans = 0
if num_b - num_l >= 2:  # 差が2以上あると、隣接なしでは並べられない
    ans = 0
elif num_b - num_l == 1:
    # 差が1匹の場合
    # 多い方が(num_b)!通り、少ない方が(num_l)!通りの並び方なので、その積をとる
    ans = math.factorial(num_b) * math.factorial(num_l) % (10**9 + 7)
else:
    # 差が0匹の場合
    # 一方を先に並べる。(num_b)!通り。もう一方をまず間に入れる。(num_l - 1)匹選ぶ方法がnum_l通りで並べ方が(num_l - 1)!通り残りを左右のどちらに置くかで2通り
    ans = math.factorial(num_b) * num_l * math.factorial(num_l - 1) * 2 % (10**9 + 7)
print(ans)

N, M = list(map(int, input().split()))
MOD = 10**9 + 7
if abs(N - M) > 1:
    print((0))
    exit()
factorial = [1] * (max(N, M) + 1)
for i in range(1, max(N, M) + 1):
    factorial[i] = (factorial[i - 1] * i) % MOD
if abs(N - M) == 0:
    ans = ((factorial[N] ** 2) * 2) % MOD
else:
    ans = (factorial[N] * factorial[M]) % MOD
print(ans)

-import math - -n, m = list(map(int, input().split())) -num_b = max([n, m])  # 多い方 -num_l = min([n, m])  # 少ない方 -ans = 0 -if num_b - num_l >= 2:  # 差が2以上あると、隣接なしでは並べられない -    ans = 0 -elif num_b - num_l == 1: -    # 差が1匹の場合 -    # 多い方が(num_b)!通り、少ない方が(num_l)!通りの並び方なので、その積をとる -    ans = math.factorial(num_b) * math.factorial(num_l) % (10**9 + 7) +N, M = list(map(int, input().split())) +MOD = 10**9 + 7 +if abs(N - M) > 1: +    print((0)) +    exit() +factorial = [1] * (max(N, M) + 1) +for i in range(1, max(N, M) + 1): +    factorial[i] = (factorial[i - 1] * i) % MOD +if abs(N - M) == 0: +    ans = ((factorial[N] ** 2) * 2) % MOD -    # 差が0匹の場合 -    # 一方を先に並べる。(num_b)!通り。もう一方をまず間に入れる。(num_l - 1)匹選ぶ方法がnum_l通りで並べ方が(num_l - 1)!通り残りを左右のどちらに置くかで2通り -    ans = math.factorial(num_b) * num_l * math.factorial(num_l - 1) * 2 % (10**9 + 7) +    ans = (factorial[N] * factorial[M]) % MOD