Problem: Mashmokh's boss, Bimokh, didn't like Mashmokh. So he fired him. Mashmokh decided to go to university and participate in ACM instead of finding a new job. He wants to become a member of Bamokh's team. In order to join he was given some programming tasks and one week to solve them. Mashmokh is not a very experienced programmer. Actually he is not a programmer at all. So he wasn't able to solve them. That's why he asked you to help him with these tasks. One of these tasks is the following.

A sequence of l integers b1, b2, ..., bl (1 ≤ b1 ≤ b2 ≤ ... ≤ bl ≤ n) is called good if each number divides (without a remainder) by the next number in the sequence. More formally <image> for all i (1 ≤ i ≤ l - 1).

Given n and k find the number of good sequences of length k. As the answer can be rather large print it modulo 1000000007 (109 + 7).

Input

The first line of input contains two space-separated integers n, k (1 ≤ n, k ≤ 2000).

Output

Output a single integer — the number of good sequences of length k modulo 1000000007 (109 + 7).

Examples

Input

3 2


Output

5


Input

6 4


Output

39


Input

2 1


Output

2

Note

In the first sample the good sequences are: [1, 1], [2, 2], [3, 3], [1, 2], [1, 3].

Solution (in JAVA):

Solution:
import java.util.*;

public class Main {
  public static Scanner in = new Scanner(System.in);
  public static ArrayList<Integer>[] divisors;
  public static int MOD = 1000_000_000 + 7;

  // 414B-MashmokhandACM
  public static void main(String[] args) {
    // TODO: Start coding here
    int n = in.nextInt();
    int k = in.nextInt();
    int[][] nums = new int[k+1][n+1];
    findAllDivisors(2001);

    for(int i=1; i<=n; ++i) {
      nums[1][i] = 1;
    }

    for(int i=0; i<=k; ++i) {
      nums[i][1] = 1;
    }

    for(int i=2; i<=k; ++i) {
      for(int j=2; j<=n; ++j) {
        ArrayList<Integer> jDivisors = divisors[j];
        int sum = 0;
        for(int d=0; d<jDivisors.size(); ++d) {
          sum = (sum + nums[i-1][jDivisors.get(d)]) % MOD;
        }
        nums[i][j] = sum;
      }
    }

    int sum = 0;
    for(int i=0; i<=n; ++i) {
      sum = (sum + nums[k][i]) % MOD;
    }

    // for(int i=0; i<=k; ++i) {
    //   System.out.println(Arrays.toString(nums[i]));
    // }

    System.out.println(sum);

    in.close();
  }

  public static void findAllDivisors(int n) {
    divisors = new ArrayList[n+1];
    for(int i=0; i<=n; ++i) {
      divisors[i] = new ArrayList<Integer>();
      divisors[i].add(1);
    }

    for(int i=2; i<=n; ++i) {
      for(int j=i; j<=n; j += i){
        // i is the divisor for j
        divisors[j].add(i);
      }
    }
  }

  public static int maxSubArraySum(int a[]) {
    int maxSoFar = 0;
    int maxEndingHere = 0;

    for(int i=0; i<a.length; ++i) {
      maxEndingHere = maxEndingHere + a[i];
      if( maxSoFar < maxEndingHere ) {
        maxSoFar = maxEndingHere;
      }
      if(maxEndingHere < 0)
        maxEndingHere = 0;
    }

    return maxSoFar;
  }

  public static int[] getIntArray(int n) {
    int[] arr = new int[n];
    for(int i=0; i<n; ++i) {
      arr[i] = in.nextInt();
    }
    return arr;
  }
}