#include <bits/stdc++.h>

using namespace std;

const int mod = 1e9 + 7;

void add(int &x, int y) {
   x += y;
   if (x >= mod) x -= mod;
}

int mul(int x, int y) {
   return (long long) x * y % mod;
}

int main() {
   ios_base::sync_with_stdio(false);
   int n, k;
   cin >> n >> k;
   vector<int> vals;
   for (int i = 1; i * i <= n; ++i) {
      int j = n / i;
      vals.push_back(i);
      if (i < j) vals.push_back(j);
   }
   sort(vals.begin(), vals.end());
   n = vals.size();
   vector<int> f(n);
   for (int i = 0; i < n; ++i) {
      f[i] = (i == 0 ? 1 : vals[i] - vals[i - 1]);
   }
   for (int i = 0; i < k - 1; ++i) {
      vector<int> nf(n);
      int now = 0;
      for (int i = n - 1; i >= 0; --i) {
         add(now, f[n - 1 - i]);
         nf[i] = mul(now, (i == 0 ? 1 : vals[i] - vals[i - 1]));
      }
      f = nf;
   }
   int ans = 0;
   for (int i = 0; i < n; ++i) {
      add(ans, f[i]);
   }
   cout << ans << "\n";
   return 0;
}

### Prompt

Your task is to create a Cpp solution to the following problem:

Find the number of sequences of length K consisting of positive integers such that the product of any two adjacent elements is at most N, modulo 10^9+7.

Constraints

* 1\leq N\leq 10^9
* ~~1~~ 2\leq K\leq 100 (fixed at 21:33 JST)
* N and K are integers.

Input

Input is given from Standard Input in the following format:


N K


Output

Print the number of sequences, modulo 10^9+7.

Examples

Input

3 2


Output

5


Input

10 3


Output

147


Input

314159265 35


Output

457397712

### Response

```cpp
#include <bits/stdc++.h>

using namespace std;

const int mod = 1e9 + 7;

void add(int &x, int y) {
   x += y;
   if (x >= mod) x -= mod;
}

int mul(int x, int y) {
   return (long long) x * y % mod;
}

int main() {
   ios_base::sync_with_stdio(false);
   int n, k;
   cin >> n >> k;
   vector<int> vals;
   for (int i = 1; i * i <= n; ++i) {
      int j = n / i;
      vals.push_back(i);
      if (i < j) vals.push_back(j);
   }
   sort(vals.begin(), vals.end());
   n = vals.size();
   vector<int> f(n);
   for (int i = 0; i < n; ++i) {
      f[i] = (i == 0 ? 1 : vals[i] - vals[i - 1]);
   }
   for (int i = 0; i < k - 1; ++i) {
      vector<int> nf(n);
      int now = 0;
      for (int i = n - 1; i >= 0; --i) {
         add(now, f[n - 1 - i]);
         nf[i] = mul(now, (i == 0 ? 1 : vals[i] - vals[i - 1]));
      }
      f = nf;
   }
   int ans = 0;
   for (int i = 0; i < n; ++i) {
      add(ans, f[i]);
   }
   cout << ans << "\n";
   return 0;
}

```