/*
TASK:books
LANG:C++
*/
# include <stdio.h>
# define MAXN 256
# define MAXK 128
#define LLONG_MAX       9223372036854775807LL
#define ULLONG_MAX      18446744073709551615ULL

long long data[MAXN][MAXK];

long long s[MAXN],d[MAXN], ans;
int n,k;

void readf() {
    scanf("%d %d",&n,&k);
    for ( int i=1 ; i<=n ; i++ )
	scanf("%lld",&s[i]);
    for ( int i=1 ; i<=n ; i++ )
	scanf("%lld",&d[i]);
}

void solve() {
    long long g;
    
    for ( int i=0 ; i<MAXN ; i++ )
	for ( int j=0 ; j<MAXK ; j++ ) 
	    data[i][j] = LLONG_MAX;
    for ( int i=0 ; i<MAXK ; i++ )
	data[0][i] = 0;
    for ( int i=1 ; i<=k ; i++ ) {
	for ( int j=1 ; j<=n ; j++ ) {
	    g = 0;
	    if ( data[j-1][i-1]!=LLONG_MAX )
		for ( int l=0 ; l<=n ; l++ ) {
		    if ( data[j+l-1][i]>data[j-1][i-1]+g )
			data[j+l-1][i] = data[j-1][i-1]+g;
		    g+=s[j+l]*d[l+1];
		    //		printf("g %lld\n",g);
		}
	}
//	for ( int j=0 ; j<=n ; j++ ) {
//	    printf(" %lld ",data[j][i]);
//	}
//	printf("\n");
    }
    ans = LLONG_MAX;
    for ( int i=0 ; i<MAXK ; i++ )
	if ( ans>data[n][i] )
	    ans = data[n][i];
}



int main() {
    readf();
    solve();
    printf("%lld\n",ans);

    return 0;
}

