module Mod = struct
  module type S = sig val modulo : int end
  module Make (S : S) = struct open S
    let modulo = modulo
    let (+^) a b = (a + b) mod modulo
    let (-^) a b = (a - b + modulo) mod modulo
    let ( *^ ) a b = (a * b) mod modulo
    let rec ( **^ ) a n =
      if n = 0 then 1
      else if n mod 2 = 1 then a *^ a **^ (n-1)
      else let t = a **^ (n/2) in t *^ t
    let inv a = a **^ (modulo-2)
    let (/^) a b = a *^ inv b
  end
end
module M = Mod.Make(struct let modulo = 1000000007 end)
open M

let sqrt_floor n =
  let rec f m = if m * m > n then m-1 else f (m+1) in f 1

let () =
  Scanf.scanf "%d %d" @@ fun n k ->
  let m = sqrt_floor n in
  let a = Array.init k (fun _ -> Array.make (m+1) 0) in
  let b = Array.init k (fun _ -> Array.make (max m (n/(m+1)+1) + 1) 0) in
  for i = 1 to m do a.(0).(i) <- i done;
  for i = n/(m+1) downto 1 do b.(0).(i) <- b.(0).(i+1) +^ (n / i - n / (i+1)) done;
  for i = 1 to k-1 do
    for j = 1 to m do
      a.(i).(j) <- a.(i).(j-1) +^ a.(i-1).(m) +^ b.(i-1).(j);
    done;
    for j = n/(m+1) downto 1 do
      b.(i).(j) <- b.(i).(j+1) +^ (n / j - n / (j+1)) *^ a.(i-1).(j);
    done;
  done;
  a.(k-1).(m) +^ b.(k-1).(1) |> Printf.printf "%d\n"
