#include<bits/stdc++.h>
using namespace std;
#define foru(i,n) for((i)=0;(i)<(int)(n);(i)++)
#define pi 1.0E-12
int M,N;
double p[350][3050];
int len[350];
double q[350][3050];
double score[350][3050],dp[350][3050];
void update(int t, double dtr){
int i;
double descent = 0.0;
for(i=len[t];i>=0;i--){
q[t][i+1] += q[t][i] * dtr;
q[t][i] *= (1.0 - dtr);
if(q[t][i] < 1.0E-50) q[t][i] = 0.0;
}
if(descent + q[t][len[t]+1] < pi){
descent += q[t][len[t]+1];
} else {
len[t]++;
}
}
int main(void){
int tam,i,j,k;
freopen("MIDAU.inp","r",stdin);
freopen("MIDAU.out","w",stdout);
scanf("%d%d",&N,&M);
foru(i,N) foru(j,M){
scanf("%d",&tam);
p[j][i] = tam / 1000.0;
}
foru(i,M){
q[i][0] = 1.0;
foru(j,N) update(i,p[i][j]);
}
foru(i,M){
double rgnjoi = 0.0;
foru(j,len[i]+1) rgnjoi += q[i][j] * j;
score[i][len[i]] = rgnjoi;
double tink4 = 0.0;
for(j=len[i]-1;j>=0;j--){
tink4 += q[i][j+1];
score[i][j] = score[i][j+1] - tink4;
}
}
foru(i,M) foru(j,N+1) foru(k,len[i]+1) if(j+k <= N) dp[i+1][j+k] = max(dp[i+1][j+k], dp[i][j] + score[i][k]);
double itk4 = 0.0;
foru(i,N+1) itk4 = max(itk4, dp[M][i]);
printf("%.12f\n",itk4);
return 0;
}
I2luY2x1ZGU8Yml0cy9zdGRjKysuaD4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKI2RlZmluZSBmb3J1KGksbikgZm9yKChpKT0wOyhpKTwoaW50KShuKTsoaSkrKykKI2RlZmluZSBwaSAxLjBFLTEyCmludCBNLE47CmRvdWJsZSBwWzM1MF1bMzA1MF07CmludCBsZW5bMzUwXTsKZG91YmxlIHFbMzUwXVszMDUwXTsKZG91YmxlIHNjb3JlWzM1MF1bMzA1MF0sZHBbMzUwXVszMDUwXTsKdm9pZCB1cGRhdGUoaW50IHQsIGRvdWJsZSBkdHIpewogICAgaW50IGk7CiAgICBkb3VibGUgZGVzY2VudCA9IDAuMDsKCiAgICBmb3IoaT1sZW5bdF07aT49MDtpLS0pewogICAgICAgIHFbdF1baSsxXSArPSBxW3RdW2ldICogZHRyOwogICAgICAgIHFbdF1baV0gKj0gKDEuMCAtIGR0cik7CiAgICAgICAgaWYocVt0XVtpXSA8IDEuMEUtNTApIHFbdF1baV0gPSAwLjA7CiAgICB9CgogICAgaWYoZGVzY2VudCArIHFbdF1bbGVuW3RdKzFdIDwgcGkpewogICAgICAgIGRlc2NlbnQgKz0gcVt0XVtsZW5bdF0rMV07CiAgICB9IGVsc2UgewogICAgICAgIGxlblt0XSsrOwogICAgfQp9CgppbnQgbWFpbih2b2lkKXsKICAgIGludCB0YW0saSxqLGs7CiAgICBmcmVvcGVuKCJNSURBVS5pbnAiLCJyIixzdGRpbik7CiAgICAgZnJlb3BlbigiTUlEQVUub3V0IiwidyIsc3Rkb3V0KTsKICAgICBzY2FuZigiJWQlZCIsJk4sJk0pOwogICAgZm9ydShpLE4pIGZvcnUoaixNKXsKICAgICAgc2NhbmYoIiVkIiwmdGFtKTsKICAgICAgICBwW2pdW2ldID0gdGFtIC8gMTAwMC4wOwogICAgfQoKICAgIGZvcnUoaSxNKXsKICAgICAgICBxW2ldWzBdID0gMS4wOwogICAgICAgIGZvcnUoaixOKSB1cGRhdGUoaSxwW2ldW2pdKTsKICAgIH0KCiAgICBmb3J1KGksTSl7CiAgICAgICAgZG91YmxlIHJnbmpvaSA9IDAuMDsKICAgICAgICBmb3J1KGosbGVuW2ldKzEpIHJnbmpvaSArPSBxW2ldW2pdICogajsKICAgICAgICBzY29yZVtpXVtsZW5baV1dID0gcmduam9pOwoKICAgICAgICBkb3VibGUgdGluazQgPSAwLjA7CiAgICAgICAgZm9yKGo9bGVuW2ldLTE7aj49MDtqLS0pewogICAgICAgICAgICB0aW5rNCArPSBxW2ldW2orMV07CiAgICAgICAgICAgIHNjb3JlW2ldW2pdID0gc2NvcmVbaV1baisxXSAtIHRpbms0OwogICAgICAgIH0KICAgIH0KCiAgICBmb3J1KGksTSkgZm9ydShqLE4rMSkgZm9ydShrLGxlbltpXSsxKSBpZihqK2sgPD0gTikgZHBbaSsxXVtqK2tdID0gbWF4KGRwW2krMV1baitrXSwgZHBbaV1bal0gKyBzY29yZVtpXVtrXSk7CgogICAgZG91YmxlIGl0azQgPSAwLjA7CiAgICBmb3J1KGksTisxKSBpdGs0ID0gbWF4KGl0azQsIGRwW01dW2ldKTsKCiAgICBwcmludGYoIiUuMTJmXG4iLGl0azQpOwoKICAgIHJldHVybiAwOwp9Cg==