import java.io.*;
import java.util.*;

public class lcm_sp implements Runnable {

	public static void main(String[] args) {
		new Thread(new lcm_sp()).run();
	}

	public void run() {
		try {
			Locale.setDefault(Locale.US);
			br = new BufferedReader(new FileReader(FILENAME + ".in"));
			out = new PrintWriter(FILENAME + ".out");
			solve();
			out.close();
		} catch (IOException e) {
			e.printStackTrace();
		}
	}

	BufferedReader br;

	PrintWriter out;

	StringTokenizer st;

	String nextToken() throws IOException {
		while (st == null || !st.hasMoreTokens()) {
			st = new StringTokenizer(br.readLine());
		}
		return st.nextToken();
	}

	int nextInt() throws IOException {
		return Integer.parseInt(nextToken());
	}
	
	long nextLong() throws IOException {
		return Long.parseLong(nextToken());
	}

	void myAssert(boolean e, String s) {
		if (!e) {
			throw new Error("Assertion failure " + s);
		}
	}

	private static final String FILENAME = "lcm";
	
	long gcd(long a, long b) {
		while (a != 0) {
			long t = b % a;
			b = a;
			a = t;
		}
		return b;
	}
	
	long lcm(long a, long b) {
		return a / gcd(a, b) * b;
	}
	
	int MOD = (int) (1e9 + 7);

	public void solve() throws IOException {
		long n = nextLong();
		myAssert((1 <= n) && (n <= 1e12), "Wrong n");
		int k = nextInt();
		myAssert((1 <= k) && (k <= 100), "Wrong k");
		ArrayList<Long> divs = new ArrayList<Long>();
		for (long i = 1; i * i <= n; i++) {
			if (n % i == 0) {
				divs.add(i);
				if (i != n / i) {
					divs.add(n / i);
				}
			}
		}
		Collections.sort(divs);
		int m = divs.size();
		long[] diva = new long[m];
		HashMap<Long, Integer> hm = new HashMap<Long, Integer>();
		for (int i = 0; i < m; i++) {
			hm.put(divs.get(i), i);
			diva[i] = divs.get(i);
		}
		long[][] d = new long[k + 1][m];
		d[0][0] = 1;
		for (int i = 0; i < m; i++) {
			for (int j = 0; j < k; j++) {
				for (int kk = 0; kk < m; kk++) {
					if (d[j][kk] > 0) {
						long t = lcm(diva[kk], diva[i]);
						if (hm.containsKey(t)) {
							d[j + 1][hm.get(t)] += d[j][kk];
							d[j + 1][hm.get(t)] %= MOD;
						}
					}
				}
			}
		}
		out.println(d[k][hm.get(n)]);
	}
}
