#include<bits/stdc++.h>
#pragma GCC optimize(1)
#pragma GCC optimize(2)
#pragma GCC optimize(3,"Ofast","inline")
using namespace std;
const long long maxn=2005;
long long s1[maxn][maxn],s2[maxn][maxn],n,m;
const long long mod=1e9+7;
void getS1() {
for(int i=0; i<=n; i++)s1[i][i]=1;
for(int i=1; i<=n; i++)
for(int j=1; j<=m&&j<=i; j++)
s1[i][j]=(s1[i-1][j-1]+(i-1)*s1[i-1][j])%mod;
}
void getS2(){
for(int i=1;i<=n;i++)s2[i][1]=1;
for(int i=1;i<=n;i++){
for(int j=2;j<=i&&j<=m;j++){
s2[i][j]=(s2[i-1][j-1]+j*s2[i-1][j])%mod;
}
}
}
int main(){
//freopen(" .in","r",stdin);
//freopen(" .out","w",stdout);
cin>>n>>m;
getS2();
cout<<s2[n][m];
}