#include <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>

using namespace std;

#define LL long long

const LL MOD = 1000000007;

int main() {
  LL N, K;
  cin >> N >> K;
  vector<int> div;
  for (int k=1; k*k<=N; k++) {
    div.push_back(k);
    int m = N / k;
    if (m != k) div.push_back(m);
  }
  sort(div.begin(), div.end());
  vector<LL> initial;
  int prev = 0;
  for (auto v : div) {
    initial.push_back(v-prev);
    prev = v;
  }
  vector<LL> curr = initial;
  vector<LL> next(curr.size(), 0);
  for (int k=0; k<K-1; k++) {
    LL t = 0;
    for (int i=0; i<(int)curr.size(); i++) {
      int j = (int)(curr.size()-i-1);
      t += curr[i] ;
      t %= MOD;
      next[j] = (initial[j] * t) % MOD;
    }
    swap(curr, next);
  }
  int res = 0;
  for (auto v : curr) {
    res = (res + v) % MOD;
  }
  cout << res << endl;
  return 0;
}

### Prompt

Please formulate 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 <iostream>
#include <vector>
#include <map>
#include <cmath>
#include <algorithm>

using namespace std;

#define LL long long

const LL MOD = 1000000007;

int main() {
  LL N, K;
  cin >> N >> K;
  vector<int> div;
  for (int k=1; k*k<=N; k++) {
    div.push_back(k);
    int m = N / k;
    if (m != k) div.push_back(m);
  }
  sort(div.begin(), div.end());
  vector<LL> initial;
  int prev = 0;
  for (auto v : div) {
    initial.push_back(v-prev);
    prev = v;
  }
  vector<LL> curr = initial;
  vector<LL> next(curr.size(), 0);
  for (int k=0; k<K-1; k++) {
    LL t = 0;
    for (int i=0; i<(int)curr.size(); i++) {
      int j = (int)(curr.size()-i-1);
      t += curr[i] ;
      t %= MOD;
      next[j] = (initial[j] * t) % MOD;
    }
    swap(curr, next);
  }
  int res = 0;
  for (auto v : curr) {
    res = (res + v) % MOD;
  }
  cout << res << endl;
  return 0;
}

```