#include <bits/stdc++.h>
using namespace std;
string s[505];
int n, par[505][505], a[505 * 505] = {0}, v[505 * 505] = {0}, p[505 * 505];
bool b[505 * 505] = {0};
int dfs(int x, int y, int k) {
  par[x][y] = k;
  int ret = 1;
  if (x > 0 && par[x - 1][y] == -1 && s[x - 1][y] == '.')
    ret += dfs(x - 1, y, k);
  if (x + 1 < n && par[x + 1][y] == -1 && s[x + 1][y] == '.')
    ret += dfs(x + 1, y, k);
  if (y > 0 && par[x][y - 1] == -1 && s[x][y - 1] == '.')
    ret += dfs(x, y - 1, k);
  if (y + 1 < n && par[x][y + 1] == -1 && s[x][y + 1] == '.')
    ret += dfs(x, y + 1, k);
  return ret;
}
void reset(int bx, int ex, int by, int ey) {
  int i, j;
  for (i = bx; i <= ex; i++) {
    for (j = by; j <= ey; j++) b[par[i][j]] = 0;
  }
}
int get_sum(int bx, int ex, int by, int ey) {
  int i, j, ret = 0, u;
  for (i = bx; i <= ex; i++) {
    for (j = by; j <= ey; j++) {
      if (s[i][j] == 'X') continue;
      u = par[i][j];
      if (v[u] == 0 && b[u] == 0) ret += a[u];
      b[u] = 1;
    }
  }
  return ret;
}
int main() {
  std::ios_base::sync_with_stdio(0);
  int cases, caseno = 0, i, j, k, t, u, mx, sum, temp, sz = 0;
  cin >> n >> k;
  for (i = 0; i <= n - 1; i++) cin >> s[i];
  memset(par, -1, sizeof(par));
  for (i = 0; i <= n - 1; i++) {
    for (j = 0; j <= n - 1; j++) {
      if (s[i][j] == 'X') {
        par[i][j] = sz;
        a[sz++] = 1;
      } else if (par[i][j] == -1) {
        a[sz] = dfs(i, j, sz);
        sz++;
      }
    }
  }
  mx = 0;
  for (i = 0; i <= n - k; i++) {
    sum = 0;
    memset(v, 0, sizeof(v));
    for (t = i; t <= i + k - 1; t++) {
      for (j = 0; j <= k - 1; j++) {
        v[par[t][j]]++;
        if (v[par[t][j]] == 1) sum += a[par[t][j]];
      }
    }
    for (j = 0; j <= n - k; j++) {
      temp = 0;
      if (j > 0) {
        for (t = i; t <= i + k - 1; t++) {
          u = par[t][j - 1];
          v[u]--;
          if (v[u] == 0) sum -= a[u];
        }
        for (t = i; t <= i + k - 1; t++) {
          u = par[t][j + k - 1];
          v[u]++;
          if (v[u] == 1) sum += a[u];
        }
      }
      if (i > 0) reset(i - 1, i - 1, j, j + k - 1);
      if (i + k < n) reset(i + k, i + k, j, j + k - 1);
      if (j > 0) reset(i, i + k - 1, j - 1, j - 1);
      if (j + k < n) reset(i, i + k - 1, j + k, j + k);
      if (i > 0) temp += get_sum(i - 1, i - 1, j, j + k - 1);
      if (i + k < n) temp += get_sum(i + k, i + k, j, j + k - 1);
      if (j > 0) temp += get_sum(i, i + k - 1, j - 1, j - 1);
      if (j + k < n) temp += get_sum(i, i + k - 1, j + k, j + k);
      mx = max(mx, sum + temp);
    }
  }
  cout << mx << '\n';
  return 0;
}
