#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
 
using namespace std;
 
const int N = 55;
 
int n, c;
int col[10][10];
int par[N];
int rank[N];
int dy[6] = {-1, -1, 0, 0, 1, 1};
int dx[6] = {-1, 0, -1, 1, 0, 1};
 
void init(){
  for(int i=0;i<N;i++){
    par[i] = i;
    rank[i] = 0;
  }
}
 
int find(int x){
  if(par[x] == x) return x;
  else return par[x] = find(par[x]);
}
 
void unite(int x, int y){
  x = find(x);
  y = find(y);
  if( x== y) return;
  if(rank[x] < rank[y]) par[x] = y;
  else{
    par[y] = x;
    if(rank[x] == rank[y]) rank[x]++;
  }
}
 
bool same(int x, int y){
  return find(x) == find(y);
}
 
void print(){
for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        //cout << i*(i+1)/2+j << ' ';
        cout << par[i*(i+1)/2+j]  << ' ';
      }
      cout << endl;
    }
    for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        cout << rank[i*(i+1)/2+j]  << ' ';
      }
      cout << endl;
    }
    //for(int i=0;i<n*(n+1)/2;i++) cout << par[i] << ' '; cout << endl;
    //for(int i=0;i<n*(n+1)/2;i++) cout << rank[i] << ' '; cout << endl;
    cout << endl;
}
 
main(){
  while(cin >> n >> c && (n|c)){
    int rem = 0;
    for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        cin >> col[i][j];
        if(col[i][j] != 0) rem++;
      }
    }
    init();
    for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        for(int k=0;k<6;k++){
          int ny = i + dy[k];
          int nx = j + dx[k];
          if(nx < 0 || nx > ny) continue;
          if(ny < 0 || ny >= n) continue;
          if(col[i][j] == col[ny][nx]){
            unite(i*(i+1)/2+j, ny*(ny+1)/2+nx);
          }
        }
      }
    }
    int size[55];
    fill(size, size+55, 0);
    for(int i=0;i<n*(n+1)/2;i++){
      size[par[i]]++;
    }
    for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        if(col[i][j] == 0){
          size[find(i*(i+1)/2+j)] = 0;
        }
      }
    }
    int zero[55];
    fill(zero, zero+55, 0);
    for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        if(col[i][j] != 0) continue;
        set<int> vis;
        for(int k=0;k<6;k++){
          int ny = i + dy[k];
          int nx = j + dx[k];
          if(nx < 0 || nx > ny) continue;
          if(ny < 0 || ny >= n) continue;
          int tmp = find(ny*(ny+1)/2+nx);
          if(!vis.count(tmp)) zero[tmp]++;
          vis.insert(tmp);
        }
      }
    }
    int ans = -10000000;
    int init_sum = 0;
    for(int i=0;i<n*(n+1)/2;i++){
      if(!zero[i]) init_sum += size[i];
    }
    /*print();
    for(int i=0;i<n*(n+1)/2;i++) cout << i << ' '; cout << endl;
    for(int i=0;i<n*(n+1)/2;i++) cout << size[i] << ' '; cout << endl;
    for(int i=0;i<n*(n+1)/2;i++) cout << zero[i] << ' '; cout << endl;*/
    for(int i=0;i<n;i++){
      for(int j=0;j<=i;j++){
        if(col[i][j] != 0) continue;
        int tmp_sum = init_sum;
        bool f = true;
        set<int> vis;
        bool f2 = true;
        bool f3 = false; // zero
        for(int k=0;k<6;k++){
          int ny = i + dy[k];
          int nx = j + dx[k];
          if(nx < 0 || nx > ny) continue;
          if(ny < 0 || ny >= n) continue;
          if(col[ny][nx] == 0) f3 = true;
          if(c == col[ny][nx]) f2 = false;
        }
        for(int k=0;k<6;k++){
          int ny = i + dy[k];
          int nx = j + dx[k];
          if(nx < 0 || nx > ny) continue;
          if(ny < 0 || ny >= n) continue;
          int tmp = find(ny*(ny+1)/2+nx);
          if(zero[tmp] == 1){
            if(vis.count(tmp)) continue;
            if(c == col[ny][nx]){
              if(f){
                if(!f3){
                  tmp_sum -= size[tmp];
                  tmp_sum--;
                }
                f = false;
              }else{
                tmp_sum -= size[tmp];
              }
            }else{
              tmp_sum += size[tmp];
            }
            vis.insert(tmp);
          }
        }
        if(f2 && !f3) tmp_sum--;
        //cout << i << ' ' << j << ' ' << init_sum << ' ' << tmp_sum << endl;
        ans = max(ans, tmp_sum);
      }
    }
    cout << ans << endl;
  }
}

Measured memory_bytes: 1196