#include<iostream>
#include<algorithm>
#include<iomanip>

double dp[101][101][101];//dp[i][j][k]=i?????????????????\??????j?????\?????\??????k?????¨??????????????????????????§???
double grow[101][101];//i=??´??????j=??????
		

int main(){
	while(1){
		int m,n;
		std::cin>>m>>n;
		if(m*n==0)break;
		for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)grow[i][j]=0;
		for(int i=1;i<=m;i++)for(int j=1;j<=m;j++)for(int k=1;k<=m;k++)dp[i][j][k]=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++){
				std::cin>>grow[i][j];
			}
		}
		for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)dp[1][i][j]=1.0;
		for(int i=2;i<=m;i++){
			for(int j=1;j<=n;j++){
				for(int k=1;k<=n;k++){
					double a=0;
					for(int l=1;l<=n;l++){
						a=std::max(a,dp[i-1][l][k]);
					}
					dp[i][j][k]=a*grow[j][k];
				}
			}
		}
		double ans=0;
		for(int i=1;i<=n;i++){
			for(int j=1;j<=n;j++)ans=std::max(ans,dp[m][i][j]);
		}
		std::cout<<std::setprecision(3)<<ans<<std::endl;
	}
	return 0;
}