#include <stdio.h>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <vector>

using namespace std;


#define NUM 1120

int main(){
	int table[NUM],limit;

	for(int i=0; i < NUM;i++)table[i] = 1;
	table[0] = 0;
	table[1] = 0;

	limit = sqrt(NUM);

	for(int i=2;i<=limit;i++){
		if(table[i] == 1){
			for(int k=2*i;k < NUM; k += i){
				table[k] = 0;
			}
		}
	}

	int prime_table[NUM],index = 0;

	for(int i = 2; i < NUM; i++){
		if(table[i] == 1){
			prime_table[index++] = i;
		}
	}

	int*** dp = new int**[15];
	for(int i = 0; i < 15; i++){
		dp[i] = new int*[index];
		for(int k = 0; k < index; k++){
			dp[i][k] = new int[1121];
		}
	}

	for(int i = 0; i < 15; i++){
		for(int k = 0; k < index; k++){
			for(int p = 0; p < 1121; p++)dp[i][k][p] = 0;
		}
	}

	for(int i = 0; i < index; i++){
		dp[1][i][prime_table[i]] = 1;
	}

	for(int k = 2; k <= 14; k++){
		for(int i = 1; i < index; i++){
			for(int p = 0; p <= i-1; p++){
				for(int a = prime_table[i]+1; a <= 1120; a++){
					dp[k][i][a] += dp[k-1][p][a-prime_table[i]];
				}
			}
		}
	}

	int A,B,sum;

	while(true){
		scanf("%d %d",&A,&B);
		if(A == 0 && B == 0)break;

		sum = 0;

		for(int i = 0; i < index; i++)sum += dp[B][i][A];

		printf("%d\n",sum);

	}

	return 0;
}