#include<bits/stdc++.h>
#define N 17
using namespace std;
double x[N][N],memo[(1<<N)][N];
int m,n;

double dfs(int a,int b){
  if(memo[a][b]>=0)return memo[a][b];
  if(b==n)return memo[a][b]=1;
  double res=0;
  for(int i=0;i<m;i++){
    if(a&(1<<i))continue;
    double sum=0,X=1;
    for(int j=0;b+j<=n;j++){
      sum+=X*(1-x[i][b+j])*dfs(a|(1<<i),b+j);
      X*=x[i][b+j];
    }
    res=max(res,sum);
  }
  return memo[a][b]=res;
}

int main(){
  cin>>m>>n;
  for(int i=0;i<m;i++)
    for(int j=0;j<n;j++)
      cin>>x[i][j];
  for(int i=0;i<(1<<m);i++)
    for(int j=0;j<=n;j++)
      memo[i][j]=-1;
  printf("%.10f\n",dfs(0,0));
  return 0;
}