#include <algorithm>
#include <bitset>
#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <ctime>
#include <climits>
#include <deque>
#include <functional>
#include <iomanip>
#include <iostream>
#include <list>
#include <map>
#include <numeric>
#include <queue>
#include <set>
#include <sstream>
#include <stack>
#include <string>
#include <utility>
#include <vector>
#define ALL(A)		(A).begin(),(A).end()
#define DUMP(A)    cout<<#A<<"="<<(A)<< endl
#define SIZE(A)    (int)((A).size())
using namespace std;
typedef long long ll;

int main(){
    int N,M;
    for(;;){
        double htoh[101][101];
        scanf("%d%d",&N,&M);
        if(N==0&&M==0) break;
        for(int i=0;i<N;i++){
            for(int j=0;j<N;j++){
                scanf("%lf",&htoh[i][j]);
            }
        }
        double dp[2][101];
        for(int i=0;i<N;i++){
            dp[0][i]=1;
        }
        for(int i=1;i<M;i++){
            for(int j=0;j<N;j++){
                dp[i%2][j]=dp[(i-1)%2][0]*htoh[0][j];
                for(int k=0;k<N;k++){
                    dp[i%2][j]=max(dp[i%2][j],dp[(i-1)%2][k]*htoh[k][j]);
                }
            }
        }
        double ma=dp[(M-1)%2][0];
        for(int i=0;i<N;i++){
            ma=max(ma,dp[(M-1)%2][i]);
        }
        printf("%.2f\n",ma);
    }
}