import std.stdio;
import std.c.stdio;
import std.range;
import std.array;
import std.functional;
import std.algorithm;
import std.conv;
import std.container;
import std.math;
import std.numeric;
import std.string;
import std.c.string;
import std.regex;
import std.typecons;
 
void main() {
    int n, k; 
    int[] x;
    bool input() {
        scanf("%d %d\n", &n, &k);
        if (n == 0 && k == 0) return false;
        x = new int[n];
        foreach (i; 0 .. n) {
            scanf("%d\n", &x[i]);
        }
        return true;
    }

    void solve() {
        int MaxPoint() {
            int CalcK(int i) {
                if (i + k > n) return 0;
                int Ret = 1;
                foreach (j; 0 .. k) {
                    Ret *= x[i + j];
                }
                return Ret;
            }
            int ck = 0;
            foreach (i; 0 .. n) {
                ck = max(ck, CalcK(i));
            }
            return ck;
        }

        int Ans = int.min;
        int o = MaxPoint;
        foreach (i; 0 .. n) {
            foreach (j; i + 1 .. n) {
                swap(x[i], x[j]);
                Ans = max(Ans, MaxPoint);
                swap(x[j], x[i]);
            }
        }
        writeln(Ans - o);
    }

    while (input) solve;
}