#include<bits/stdc++.h>
#define N 1503
using namespace std;
int n,vis[N*N],a[N][N],q,ans[N];
struct hh{
	int dis,color;
};
vector<hh>col[N][N];
bool operator<(hh a,hh b){
	return a.dis<b.dis;
}
void add(vector<hh>&A,vector<hh>&B){
	for(int i=0;i<B.size();i++)A.push_back((hh){B[i].dis+1,B[i].color});
}
vector<hh>res;
void work(int x,int y){
	while(res.size())res.pop_back();
	res.push_back((hh){1,a[x][y]});
	if(x<n)add(res,col[x+1][y]);
	if(y<n)add(res,col[x][y+1]);
	if(x<n&&y<n)add(res,col[x+1][y+1]);
	sort(res.begin(),res.end());
	int now=res.size()-1;
//	cout<<x<<' '<<y<<endl;
	for(int i=0;i<res.size();i++){
//		cout<<"fuck "<<res[i].color<<' '<<res[i].dis<<endl;
		if(vis[res[i].color])continue;
		vis[res[i].color]=1;
		col[x][y].push_back(res[i]);
		if(col[x][y].size()==q+1){
			now=i;
			break;
		}
	}
//	for(int i=0;i<col[x][y].size();i++)cout<<"fuck "<<col[x][y][i].color<<' '<<col[x][y][i].dis<<endl;
	for(int i=0;i<=now;i++)vis[res[i].color]=0;
}
int main(){
	cin>>n>>q;
	for(int i=1;i<=n;i++)for(int j=1;j<=n;j++)scanf("%d",&a[i][j]);
	for(int i=n;i>=1;i--)for(int j=n;j>=1;j--)work(i,j);
	for(int i=1;i<=n;i++){
		for(int j=1;j<=n;j++){
			int now=min(n-i+1,n-j+1);
			if(col[i][j].size()==q+1)now=min(now,col[i][j][q].dis-1);
			ans[1]++,ans[now+1]--;
//			cout<<"check "<<i<<' '<<j<<' '<<now<<endl;
		}
	}
	int sum=0;
	for(int i=1;i<=n;i++){
		sum+=ans[i];
		printf("%d\n",sum);
	}
}