#include <algorithm>
#include <iostream>
#include <vector>
using namespace std;

const int mod = 1000000007;

template <unsigned MOD>
class modular_int {
	public:
		typedef unsigned value_type;
	protected:
		unsigned x;
	public:
		modular_int inv() const {
			unsigned a = MOD, b = x;
			int u = 0, v = 1;
			while (b) {
				int t = a / b;
				a -= t * b, swap(a, b);
				u -= t * v, swap(u, v);
			} if (u < 0) u += MOD;
			return modular_int(u);
		}
		inline modular_int pow(long long y) const {
			modular_int b = *this, r = 1;
			if (y < 0) b = b.inv(), y = -y;
			for (; y; y >>= 1, b *= b) if (y & 1) r *= b;
			return r;
		}
	public:
		modular_int() { x = 0; }
		modular_int(const modular_int &y) { x = y.x; }
		modular_int(modular_int &&y) { x = y.x; }
		inline void clear() { *this = modular_int(); }
		inline int to_int() const { return (int)x; }
		inline unsigned value() const { return x; }
	public:
		modular_int(int y) { if (y < 0 || (int)MOD <= y) y %= (int)MOD; if (y < 0) y += MOD; x = y; }
		modular_int(unsigned y) { if (MOD <= y) x = y % MOD; else x = y; }
		modular_int(long long y) { if (y < 0 || MOD <= y) y %= MOD; if (y < 0) y += MOD; x = y; }
		modular_int(unsigned long long y) { if (MOD <= y) x = y % MOD; else x = y; }
		modular_int &operator = (const modular_int &y) { x = y.x; }
		modular_int &operator = (const int &y) { x = y; }
		modular_int &operator = (const long long &y) { x = y; }
		modular_int &operator = (const unsigned int &y) { x = y; }
		modular_int &operator = (const unsigned long long &y) { x = y; }
		modular_int &operator += (const modular_int &y) { if ((x += y.x) >= MOD) x -= MOD; return *this; }
		modular_int &operator -= (const modular_int &y) { if ((x -= y.x) & (1u << 31)) x += MOD; return *this; }
		modular_int &operator *= (const modular_int &y) { x = (unsigned long long)x * y.x % MOD; return *this; }
		modular_int &operator /= (const modular_int &y) { x = (unsigned long long)x * y.inv().x % MOD; return *this; }
		modular_int &operator += (const int &y) { return *this += modular_int(y); }
		modular_int &operator -= (const int &y) { return *this -= modular_int(y); }
		modular_int &operator *= (const int &y) { return *this *= modular_int(y); }
		modular_int &operator /= (const int &y) { return *this /= modular_int(y); }
		modular_int &operator += (const long long &y) { return *this += modular_int(y); }
		modular_int &operator -= (const long long &y) { return *this -= modular_int(y); }
		modular_int &operator *= (const long long &y) { return *this *= modular_int(y); }
		modular_int &operator /= (const long long &y) { return *this /= modular_int(y); }
		modular_int &operator += (const unsigned int &y) { return *this += modular_int(y); }
		modular_int &operator -= (const unsigned int &y) { return *this -= modular_int(y); }
		modular_int &operator *= (const unsigned int &y) { return *this *= modular_int(y); }
		modular_int &operator /= (const unsigned int &y) { return *this /= modular_int(y); }
		modular_int &operator += (const unsigned long long &y) { return *this += modular_int(y); }
		modular_int &operator -= (const unsigned long long &y) { return *this -= modular_int(y); }
		modular_int &operator *= (const unsigned long long &y) { return *this *= modular_int(y); }
		modular_int &operator /= (const unsigned long long &y) { return *this /= modular_int(y); }
		friend modular_int operator + (modular_int x, const modular_int &y) { return x += y; }
		friend modular_int operator - (modular_int x, const modular_int &y) { return x -= y; }
		friend modular_int operator * (modular_int x, const modular_int &y) { return x *= y; }
		friend modular_int operator / (modular_int x, const modular_int &y) { return x *= y.inv(); }
		friend modular_int operator + (modular_int x, const int &y) { return x += y; }
		friend modular_int operator - (modular_int x, const int &y) { return x -= y; }
		friend modular_int operator * (modular_int x, const int &y) { return x *= y; }
		friend modular_int operator / (modular_int x, const int &y) { return x /= y; }
		friend modular_int operator + (modular_int x, const long long &y) { return x += y; }
		friend modular_int operator - (modular_int x, const long long &y) { return x -= y; }
		friend modular_int operator * (modular_int x, const long long &y) { return x *= y; }
		friend modular_int operator / (modular_int x, const long long &y) { return x /= y; }
		friend modular_int operator + (modular_int x, const unsigned &y) { return x += y; }
		friend modular_int operator - (modular_int x, const unsigned &y) { return x -= y; }
		friend modular_int operator * (modular_int x, const unsigned &y) { return x *= y; }
		friend modular_int operator / (modular_int x, const unsigned &y) { return x /= y; }
		friend modular_int operator + (modular_int x, const unsigned long long &y) { return x += y; }
		friend modular_int operator - (modular_int x, const unsigned long long &y) { return x -= y; }
		friend modular_int operator * (modular_int x, const unsigned long long &y) { return x *= y; }
		friend modular_int operator / (modular_int x, const unsigned long long &y) { return x /= y; }
		modular_int operator - () const { return (x ? MOD - x : 0); }
		modular_int operator ++ () const { return *this += 1; }
		modular_int operator -- () const { return *this -= 1; }
		modular_int operator ++ (int) const { modular_int ret = *this; *this += 1; return ret; }
		modular_int operator -- (int) const { modular_int ret = *this; *this -= 1; return ret; }
		friend bool operator < (const modular_int &x, const modular_int &y) { return x.x < y.x; }
		friend bool operator == (const modular_int &x, const modular_int &y) { return x.x == y.x; }
		friend bool operator != (const modular_int &x, const modular_int &y) { return x.x != y.x; }
		friend ostream &operator << (ostream &os, modular_int x) { return os << x.x; }
		friend istream &operator >> (istream &is, modular_int &x) { is >> x.x; x.x %= MOD; return is; }
};
typedef modular_int <mod> mod_int;

int n, k;
mod_int dp[500000], ans;
int main() {
	cin >> n >> k;
	vector <int> v;
	for (int i = 1; i * i <= n; ++ i) {
		v.push_back(i);
		if (i != n / i)
			v.push_back(n / i);
	}
	sort(v.begin(), v.end());
	dp[0] = 1;
	for (int i = 0; i < k; ++ i) {
		reverse(dp, dp + (int)v.size());
		for (int i = (int)v.size() - 1; ~i; -- i)
			dp[i] += dp[i + 1], dp[i + 1] *= (v[i + 1] - v[i]);
	}
	for (int i = 0; i < (int)v.size(); ++ i)
		ans += dp[i];
	cout << ans << endl;
	return 0;
}


Measured memory_bytes: 2560