#include <bits/stdc++.h>
using namespace std;
int n;
bool blocked[500][500];
int cmp[500][500];
int di[] = {0, 0, 1, -1};
int dj[] = {1, -1, 0, 0};
bool valid(int i, int j) {
  return i >= 0 && i < n && j >= 0 && j < n && !blocked[i][j];
}
int bfs(int i, int j, int cc) {
  cmp[i][j] = cc;
  int num = 0;
  for (int k = 0; k < 4; k++) {
    int ni = i + di[k];
    int nj = j + dj[k];
    if (valid(ni, nj) && cmp[ni][nj] != cc) num += bfs(ni, nj, cc);
  }
  return num + 1;
}
int main() {
  int k;
  cin >> n >> k;
  memset(cmp, -1, sizeof(cmp));
  char buffer[100000];
  for (int i = 0; i < n; i++) {
    scanf("%s", buffer);
    string s(buffer);
    for (int j = 0; j < n; j++) blocked[i][j] = s[j] == 'X';
  }
  int csz[500 * 500];
  int cc = 0;
  for (int i = 0; i < n; i++)
    for (int j = 0; j < n; j++)
      if (cmp[i][j] == -1 && valid(i, j)) {
        csz[cc] = bfs(i, j, cc);
        cc++;
      }
  int value = 0;
  int sz[cc];
  memset(sz, 0, sizeof(sz));
  bool init[cc];
  memset(init, false, sizeof(init));
  for (int i = 0; i + k <= n; i++) {
    for (int i_p = i; i_p < i + k; i_p++)
      for (int j_p = 0; j_p < k - 1; j_p++)
        if (valid(i_p, j_p)) sz[cmp[i_p][j_p]]++;
    for (int j = 0; j + k <= n; j++) {
      for (int i_p = i; i_p < i + k; i_p++)
        if (valid(i_p, j + k - 1)) sz[cmp[i_p][j + k - 1]]++;
      int total = k * k;
      for (int i_p = i; i_p < i + k; i_p++) {
        if (valid(i_p, j - 1) && !init[cmp[i_p][j - 1]]) {
          init[cmp[i_p][j - 1]] = true;
          total += csz[cmp[i_p][j - 1]] - sz[cmp[i_p][j - 1]];
        }
        if (valid(i_p, j + k) && !init[cmp[i_p][j + k]]) {
          init[cmp[i_p][j + k]] = true;
          total += csz[cmp[i_p][j + k]] - sz[cmp[i_p][j + k]];
        }
      }
      for (int j_p = j; j_p < j + k; j_p++) {
        if (valid(i - 1, j_p) && !init[cmp[i - 1][j_p]]) {
          init[cmp[i - 1][j_p]] = true;
          total += csz[cmp[i - 1][j_p]] - sz[cmp[i - 1][j_p]];
        }
        if (valid(i + k, j_p) && !init[cmp[i + k][j_p]]) {
          init[cmp[i + k][j_p]] = true;
          total += csz[cmp[i + k][j_p]] - sz[cmp[i + k][j_p]];
        }
      }
      value = max(value, total);
      for (int i_p = i; i_p < i + k; i_p++)
        if (valid(i_p, j)) sz[cmp[i_p][j]]--;
      memset(init, false, sizeof(init));
    }
    memset(sz, 0, sizeof(sz));
  }
  cout << value << endl;
  return 0;
}
