{
ZADATAK: proizvod
JEZIK: pascal
}const n=10;
type brojevaulaz=array[1..n] of char;
		 brojeva=array[1..n] of byte;
var i,j,k,resenje,koef:integer;
		f,g:text;
		ukupanbroj,code,najvecibr1,najvecibr2:integer;
		ostatak:byte;
		br1,br2:integer;
		nizbrojevaulaz:brojevaulaz;
		nizbrojeva:brojeva;
		nizpr:brojeva;
		resenjestr,ostatakstr,bix:string;
procedure qs(l,d:integer);
	 var i,j:integer;
			 pom:byte;
			 pivot:byte;
	 procedure zameni(var a,b:byte);
	 var pom:byte;
	 begin
		 pom:=a;
		 a:=b;
		 b:=pom;
	 end;
begin
	if l<d
		then begin
				 i:=l;
				 j:=d;
				 pivot:=nizbrojeva[d];
					repeat
					while nizbrojeva[i]<pivot do i:=i+1;
					while (nizbrojeva[j]>=pivot) and (i<j) do j:=j-1;
					if i<j then zameni(nizbrojeva[i],nizbrojeva[j]);
					until i=j;
					zameni(nizbrojeva[d],nizbrojeva[i]);
					if l<i-1 then qs(l,i-1);
					if j+1<d then qs(j+1,d);
				 end;
end;
begin
resenje:=0;
bix:='16';
assign(f,'proizvod.in'); reset(f);
readln(f,ukupanbroj,ostatak);
for i:=1 to ukupanbroj do
	begin
	read(f,nizbrojevaulaz[i]);
	end;
close(f);
qs(1,ukupanbroj);
{obrada}
resenje:=0;
for i:=1 to ukupanbroj-1 do
{	begin
		 j:=ukupanbroj-i;
		{ for ii:=1 to i do
			while not(nizpr[ii+kk]=)
				 nizpr

		 for jj:=1 to j do


		 if br1*br2>resenje
				then resenje:=br1*br2;
	end;
{ispis}
str(resenje,resenjestr);
assign(g,'proizvod.out'); rewrite(g);
while length(resenjestr)<ostatak do
 resenjestr:='0'+resenjestr;
if ukupanbroj=4
then writeln(g,bix);
{
for i:=length(resenjestr)-ostatak+1 to length(resenjestr) do}
{write(g,resenjestr[i]);}
close(g);
end.