#include <bits/stdc++.h>
using namespace std;
namespace mint {
  int md = 1e9 + 7;
  inline void add (int &a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    a += b; if (a >= md) a -= md;
  }
  inline void sub (int &a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    a -= b; if (a < 0) a += md;
  }
  inline int sum (int a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    add(a, b); return a;
  }
  inline int dif (int a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    sub(a, b); return a;
  }
  template<class... A>
  inline int prod (A... args) {
    long long ret = 1;
    for (int a :	initializer_list<int>{args...}) {
      assert(0 <= a && a < md);
      ret *= a;
      ret %= md;
    }
    return (int)(ret % md);
  }
  inline void mul (int &a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    a = prod(a, b);
  }
  inline int inv (int a) {
    assert(0 <= a && a < md);
    a %= md;
    if(a < 0) a += md;
    int b = md, u = 0, v = 1;
    while (a) {
      int t = b / a;
      b -= a * t; swap(a, b);
      u -= v * t; swap(u, v);
    }
    assert(b == 1);
    if(u < 0) u += md;
    return u;
  }
  inline int quot (int a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    return prod(a, inv(b));
  }
  inline void div (int& a, int b) {
    assert(0 <= a && a < md && 0 <= b && b < md);
    a = quot(a, b);
  }
  inline int pow (int a, long long b) {
    assert(0 <= a && a < md);
    int res = 1;
    for (; b; b >>= 1) {
      if (b & 1) mul(res, a);
      mul(a, a);
    }
    return res;
  }
  namespace factorials {
    int sz;
    vector<int> fact, finv;
    void init (int n) {
      sz = n;
      fact.resize(n); finv.resize(n);
      fact[0] = 1;
      for (int i = 1; i < n; i++) fact[i] = prod(fact[i - 1], i);
      finv[n - 1] = inv(fact[n - 1]);
      for (int i = n - 2; i >= 0; i--) finv[i] = prod(finv[i + 1], i + 1);
    }
  }
  inline int fct (int i) {
    using namespace factorials;
    assert(0 <= i && i < sz);
    return fact[i];
  }
  inline int fnv (int i) {
    using namespace factorials;
    assert(0 <= i && i < sz);
    return finv[i];
  }
  inline int binom (int n, int k) {
    using namespace factorials;
    assert(0 <= n && n < sz);
    if (0 < k || n < k) return 0;
    return prod(fact[n], finv[k], finv[n - k]);
  }
}
int main() {
  std::cin.tie(0); std::cin.sync_with_stdio(false);
  int n, k;
  std::cin >> n >> k;
  std::vector<int> a = [n]{
    std::vector<int> a;
    for (int i = 1; i <= n; i++) {
      if (!a.empty() && n / i == a.front()) {
        i = n / (n / i - 1);
      }
      a.insert(a.begin(), n / i);
      if (n / i == 1) break;
    }
    return a;
  }();
  auto lb = [&] (int x) {
    auto it = std::lower_bound(a.begin(), a.end(), x);
    return int(it - a.begin());
  };
  int N = a.size();
  assert(a[0] == 1);
  assert(a[N - 1] == n);
  std::vector<int> dp(N, 1);
  std::vector<int> cum(N, 0);
  for (int i = 1; i < N; i++) {
    cum[i] = mint::sum(cum[i - 1], mint::prod(dp[i - 1], a[i - 1] - (i - 2 >= 0 ? a[i - 2] : 0)));
  }
  auto sum = [&] (int x) {
    assert(0 <= x && x <= n);
    int i = lb(x);
    assert(0 <= i && i < N);
    int ret = cum[i];
    mint::add(ret, mint::prod(dp[i], x - (i == 0 ? 0 : a[i - 1])));
    return ret;
  };
  auto renew = [&] {
    std::vector<int> new_dp(N), new_cum(N, 0);
    for (int i = 0; i < N; i++) {
      new_dp[i]  = sum(n / a[i]);
      if (i >= 1) new_cum[i] = mint::sum(new_cum[i - 1], mint::prod(new_dp[i - 1], a[i - 1] - (i - 2 >= 0 ? a[i - 2] : 0)));
    }
    dp  = new_dp;
    cum = new_cum;
  };
  for (int i = 0; i < k - 1; i++) {
    renew();
  }
  std::cout << sum(n) << std::endl;
  return 0;
}

Measured memory_bytes: 1660