#include <bits/stdc++.h>
#define FI first
#define SE second
#define EPS 1e-9
#define ALL(a) a.begin(),a.end()
#define SZ(a) int((a).size())
#define MS(s, n) memset(s, n, sizeof(s))
#define FOR(i,a,b) for (int i = (a); i <= (b); i++)
#define FORE(i,a,b) for (int i = (a); i >= (b); i--)
#define FORALL(it, a) for (__typeof((a).begin()) it = (a).begin(); it != (a).end(); it++)
#define WHATIS(x) cout << #x << " is " << x << endl;
#define ERROR(args...) { string _s = #args; replace(_s.begin(), _s.end(), ',', ' '); stringstream _ss(_s); istream_iterator<string> _it(_ss); err(_it, args); }
//__builtin_ffs(x) return 1 + index of least significant 1-bit of x
//__builtin_clz(x) return number of leading zeros of x
//__builtin_ctz(x) return number of trailing zeros of x

using namespace std;
using ll = long long;
using ld = double;
typedef pair<int, int> II;
typedef pair<II, int> III;
typedef complex<ld> cd;
typedef vector<cd> vcd;

void err(istream_iterator<string> it) {}
template<typename T, typename... Args>
void err(istream_iterator<string> it, T a, Args... args) {
    cout << *it << " = " << a << endl;
    err(++it, args...);
}

const ll MODBASE = 1000000007LL;
const int MAXN = 100010;
const int MAXM = 35;
const int MAXK = 510;
const int MAXQ = 200010;

// class ReconstructNumber {
// public:
//     string smallest(string);
// };

// string ReconstructNumber::smallest(string s) {
// }

int n, k;
ll dp[110][100000], f[100000];
vector<II> temp;
vector<int> p;

int main() {
    ios::sync_with_stdio(0);
    cin.tie(nullptr);
    cin >> n >> k;

    int now = 1;
    temp.emplace_back(II(0, 0));
    p.emplace_back(0);
    while (now <= n) {
        int g = n / now;
        int dau = now, cuoi = n, mid;
        while (dau <= cuoi) {
            mid = (dau + cuoi) >> 1;
            if (n / mid < g) cuoi = mid-1;
            else dau = mid+1;
        }
        temp.emplace_back(II(now, cuoi));
        // cout << now << ' ' << cuoi << ' ' << g << endl;
        p.emplace_back(g);
        now = cuoi + 1;
    }
    int m = SZ(temp) - 1;
    FOR(i,1,m) dp[1][i] = temp[i].SE - temp[i].FI + 1;
    FOR(i,1,k-1) {
        FOR(i,0,m) f[i] = 0;
        FOR(j,1,m) {
            int g = p[j];
            int dau = 1, cuoi = m, mid;
            while (dau <= cuoi) {
                mid = (dau + cuoi) >> 1;
                if (temp[mid].FI <= g) dau = mid+1;
                else cuoi = mid-1;
            }
            int vt = cuoi;
            dp[i+1][cuoi] = (dp[i+1][cuoi] + dp[i][j] * (g - temp[cuoi].FI + 1) % MODBASE) % MODBASE;
            f[cuoi-1] = (f[cuoi-1] + dp[i][j]) % MODBASE;
        }
        ll sum = 0;
        FORE(j,m,1) {
            sum = (sum + f[j]) % MODBASE;
            dp[i+1][j] = (dp[i+1][j] + sum * (temp[j].SE - temp[j].FI + 1) % MODBASE) % MODBASE;
        }
    }
    // FOR(i,1,k) {
    //     FOR(j,1,m) cout << dp[i][j] << ' ';
    //     cout << endl;
    // }
    ll res = 0;
    FOR(i,1,m) res = (res + dp[k][i]) % MODBASE;
    cout << res;

    // n = 1000;
    // FOR(i,1,n) temp.emplace_back(n / i);
    // //FOR(i,0,SZ(temp)-1) cout << temp[i] << endl;
    // int cnt = 1;
    // FOR(i,1,SZ(temp)-1)
    //     if (temp[i] == temp[i-1]) cnt++;
    //     else {
    //         p.emplace_back(II(temp[i-1], cnt));
    //         cnt = 1;
    //     }
    // p.emplace_back(II(temp[SZ(temp)-1], cnt));
    // cout << endl;
    // FOR(i,0,SZ(p)-1) {

    //     cout << p[i].FI << ' ' << p[i].SE << endl;
    // }

    return 0;
}

Measured memory_bytes: 80120