#include <stdio.h>
#include <stdbool.h>
#define N 16
int kouyakusuu(int a,int b);
int  buffer[N];
bool used[N + 1];

void print_perm(int n)
{
//  for (int i = 0; i < n; i++)
//    printf("%d ", buffer[i]);
//  printf("\n");
}

void perm_sub(int n, int m)
{
  if (n == m)
    print_perm(n);
  else {
    for (int i = 1; i <= n; i++) {
      if (used[i]) continue;
      buffer[m] = i;
      used[i] = true;
      perm_sub(n, m + 1);
      used[i] = false;
    }
  }
}

void permutations(int n)
{
  if (n > 0 || n < N) perm_sub(n, 0);
}

int main(){
    int ans,k,n;
    long int tmp;
    scanf("%d %d",&n,&k);
      permutations(n);
      permutations(k);
    for(int i=1;i<n;i++){
        tmp+=kouyakusuu(buffer[0],buffer[i]);
    }
    ans=tmp%(10^9+7);
    printf("%d\n",ans);
}
int kouyakusuu(int a,int b){
    int tmp,r;
    /* 自然数 a > b を確認・入替 */
     if(a<b){
       tmp = a;
       a = b;
       b = tmp;
     }
     /* ユークリッドの互除法 */
     r = a % b;
     while(r!=0){
       a = b;
       b = r;
       r = a % b;
     }
     /* 最大公約数を出力 */
    return b;
}
//int sequence(int x,int y){//二つの公約数を返す
//    int n=kouyakusuu(x,y);
//    n=kouyakusuu()
//    return n;
//}
