#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
#include <iomanip>
using namespace std;

const int LIMIT = 101;

int main()
{
	int n, m;
	double g[ LIMIT ][ LIMIT ];
	double dp[ LIMIT ][ LIMIT ];

	while( cin >> n >> m && ( n || m ) ){
		memset( g, 0, sizeof(g) );
		memset( dp, 0, sizeof(dp) );
		for( int i = 0; i < n; ++i ){
			for( int j = 0; j < n; ++j ){
				cin >> g[ i ][ j ];
			}
		}
		for( int i = 0; i < n; ++i ){
			dp[ 1 ][ i ] = 1.0;
		}
		for( int i = 2; i <= m; ++i ){
			for( int j = 0; j < n; ++j ){
				for( int k = 0; k < n; ++k ){
					dp[ i ][ j ] = max( dp[ i ][ j ], dp[ i - 1 ][ k ] * g[ k ][ j ] );
				}
			}
		}
		double result = 0.0;
		for( int i = 0; i < n; ++i ){
			result = max( result, dp[ m ][ i ] );
		}
		cout << fixed << setprecision( 2 ) << result << endl;
	}

	return 0;
}