Greg has a pad. The pad's screen is an n × m rectangle, each cell can be either black or white. We'll consider the pad rows to be numbered with integers from 1 to n from top to bottom. Similarly, the pad's columns are numbered with integers from 1 to m from left to right.

Greg thinks that the pad's screen displays a cave if the following conditions hold:

  * There is a segment [l, r] (1 ≤ l ≤ r ≤ n), such that each of the rows l, l + 1, ..., r has exactly two black cells and all other rows have only white cells. 
  * There is a row number t (l ≤ t ≤ r), such that for all pairs of rows with numbers i and j (l ≤ i ≤ j ≤ t) the set of columns between the black cells in row i (with the columns where is these black cells) is the subset of the set of columns between the black cells in row j (with the columns where is these black cells). Similarly, for all pairs of rows with numbers i and j (t ≤ i ≤ j ≤ r) the set of columns between the black cells in row j (with the columns where is these black cells) is the subset of the set of columns between the black cells in row i (with the columns where is these black cells). 



Greg wondered, how many ways there are to paint a cave on his pad. Two ways can be considered distinct if there is a cell that has distinct colors on the two pictures.

Help Greg.

Input

The first line contains two integers n, m — the pad's screen size (1 ≤ n, m ≤ 2000).

Output

In the single line print the remainder after dividing the answer to the problem by 1000000007 (109 + 7).

Examples

Input

1 1


Output

0


Input

4 4


Output

485


Input

3 5


Output

451
from sys import stdin
try:
    from dev import stdin
except Exception:
    pass
from array import array


n, m = [int(i) for i in stdin.readline().split()]
up = {}
down = {}

result = 0
f = False
even = False
threshold = n // 2 - 1

prev = [0] * m
for row in xrange(0, n):
    line = array("d")
    line.append(0)
    u = 0
    s = 0
    if not f:
        f = row > threshold
    even = (row + 0.5) == (n / 2.0)
    for l in xrange(1, m):
        p = prev[l]
        d = (u + s) % 1000000007
        s += p
        u = (d + p) % 1000000007
        line.append(u + 1)
        if not f:
            up[(row, l)] = u + 1
            down[(row, l)] = d + 1
        else:
            if not even:
                result += ((u + 1) * down[(n - row - 1, l)] + (d + 1) * up[(n - row - 1, l)]) * (m - l)
            else:
                result += (d + 1) * (u + 1) * (m - l)
    prev = line

print int(result % 1000000007)
