#include <iostream>
using namespace std;

int DFS_FindNext(int arr[], int nMaxElm, int nDepth)
{
    int n = nDepth - 1;
    for (++arr[n]; n >= 0 && arr[n] >= nMaxElm; ++arr[--n]);
    if (n<0) 
        return 0;
    for (int t = n + 1; t<nDepth; ++t) 
        arr[t] = arr[n];
    return 1;
};


int main()
{
    int n, m;
    long cnt = 0;
    while (cin>>m>>n)
    { 
        cnt = 0;
        int arr[20000] = {0};
        do
        {
            cnt++;
        } while (DFS_FindNext(arr, m, n));
        cout << cnt%1000000007 << endl;
    }
    return 0;
}
0%  有什么问题吗