#include <cstdio>
#include <cstring>
#include <cmath>
#include <vector>
#include <list>
#include <string>
#include <set>
#include <map>
#include <queue>
#include <stack>
#include <algorithm>
#include <iostream>
#include <sstream>
using namespace std;

typedef long long int64;
const int inf = (int)1e9;

int main()
{
	while(true) {
		
		int n, m;
		vector<vector<double> > g;
		vector<double> dp[2];
		
		scanf("%d%d", &n, &m);
		if(n == 0)
			break;
		g.resize(n); dp[0].resize(n); dp[1].resize(n);
		for(int i = 0; i < n; ++i) {
			g[i].resize(n);
			for(int j = 0; j < n; ++j)
				scanf("%lf", &g[i][j]);
		}
		
		for(int i = 0; i < n; ++i)
			dp[0][i] = 1;
		
		for(int day = 1; day < m; ++day) {
			
			for(int i = 0; i < n; ++i) {
				
				double &val = dp[day % 2][i];
				val = 0;
				for(int j = 0; j < n; ++j)
					val = max(val, dp[(day - 1) % 2][j] * g[j][i]);
			}
		}
		
		double ans = 0;
		for(int i = 0; i < n; ++i)
			ans = max(ans, dp[(m - 1) % 2][i]);
		
		ans = round(ans * 100) / 100;
		printf("%.2lf\n", ans);
	}
	return 0;
}

/* ハラスメントに負けず */
/* 0完太陽にも負けず */
/* はやく人権を獲得したい */
/* nullmineralが書きましたが */
/* 責任はまったくとりません */