#include <algorithm>
#include <iostream>
#include <vector>
#define N 100
using namespace std;
int n,c,inv[N],p,l,dat[N],ans,flag;
vector<int> s[N],v[N];
int visited[N];
void func(int);

int main(){
  while(1){
    cin>>n>>c;
    if(!n&&!c) break;
    for(int i=0;i<n*(n+1)/2;i++) cin>>inv[i];
    p=0;
    for(int i=1;i<=n;i++)
      for(int j=0;j<i;j++,p++) s[i-1].push_back(inv[p]);
    p=0;
    for(int i=1;i<=n;i++){
      for(int j=0;j<s[i-1].size();j++,p++){
	if(i!=n){
	  v[p].push_back(p+i);
	  v[p].push_back(p+1+i);
	  v[p+i].push_back(p);
	  v[p+1+i].push_back(p);
	}
	if(j==s[i-1].size()-1) continue;
	v[p].push_back(p+1);
	v[p+1].push_back(p);
      }
    }
    ans=-1000000000;
    for(int i=0;i<n*(n+1)/2;i++){
      if(inv[i]) continue;
      for(int j=0;j<n*(n+1)/2;j++) dat[j]=0,visited[j]=0;
      inv[i]=c;
      l=1;
      for(int j=0;j<v[i].size();j++){
	if(!inv[v[i][j]]||visited[v[i][j]]) continue;
	flag=1;	
	func(v[i][j]);
	if(flag==1&&inv[v[i][j]]==c) flag=-1;
	for(int k=0;k<n*(n+1)/2;k++)
	  if(visited[k]==l) dat[k]=flag;
	l++;
      }
      int f=0;
      for(int j=0;j<v[i].size();j++){
	if(inv[v[i][j]]==0) f=1;
      }
      if(visited[i]==0&&!f) dat[i]=-1;
      inv[i]=0;
      int sum=0;
      for(int j=0;j<n*(n+1)/2;j++) sum+=dat[j];
      ans=max(ans,sum);
    }
    cout<<ans<<endl;
    for(int i=0;i<N;i++) s[i].clear(),v[i].clear();
  }
  return 0;
}

void func(int d){
  visited[d]=l;
  for(int i=0;i<v[d].size();i++){
    if(inv[v[d][i]]==0) flag=0;
    if(visited[v[d][i]]) continue;
    if(inv[v[d][i]]==inv[d]||inv[v[d][i]]==0) func(v[d][i]);
  }
}