#include<iostream>
#include<algorithm>
#include<cstdio>

int n, m;
//memo[i][j]: 直前にjを入れてi回目のときの最大倍率
double a[100][100], memo[100][100];

double rec(int i, int j){
	if(memo[i][j] >= 0){
		return memo[i][j];
	}

	if(i == m){
		return 1;
	}

	double res = 0;
	for(int u=0;u<n;u++){
		res = std::max(res, a[u][j] * rec(i+1, u));
	}

	return memo[i][j] = res;
}

int main(){
	while(std::cin >> n >> m, n){
		for(int i=0;i<n;i++){
			for(int j=0;j<n;j++){
				std::cin >> a[i][j];
			}
		}

		double res = 0;
		for(int i=0;i<n;i++){
			for(int j=0;j<100;j++){
				for(int k=0;k<100;k++){
					memo[j][k] = -1;
				}
			}
			res = std::max(res, rec(1, i));
		}

		res *= 100;
		res = static_cast<int>(res + 0.5);
		res /= 100;
		
		printf("%.2f\n", res);
	}
}