#include <bits/stdc++.h>
using namespace std;
const int N = 510;
template <typename T, typename U>
pair<T, U> operator+(const pair<T, U>& x, const pair<T, U>& y) {
  return {x.first + y.first, x.second + y.second};
}
int cc = 0;
int cl[N * N];
int n, k, tt = 0;
int m[N][N];
int ci[N * N];
bool v[N * N];
int cnt(int x, int y) {
  vector<int> s;
  for (int i = 0; i < k; i++) {
    s.push_back(m[x - 1][y + i]);
    s.push_back(m[x + k][y + i]);
    s.push_back(m[x + i][y - 1]);
    s.push_back(m[x + i][y + k]);
  }
  int ret = 0;
  for (int i = 0; i < 4 * k; i++)
    if ((s[i] > 0) && (!v[s[i]]) && (ci[s[i]] == 0)) {
      ret += cl[s[i]];
      v[s[i]] = true;
    }
  for (int i = 0; i < 4 * k; i++) v[s[i]] = false;
  return ret;
}
void dfs(int x, int y) {
  m[x][y] = cc;
  cl[cc]++;
  if (m[x - 1][y] < 0) dfs(x - 1, y);
  if (m[x + 1][y] < 0) dfs(x + 1, y);
  if (m[x][y - 1] < 0) dfs(x, y - 1);
  if (m[x][y + 1] < 0) dfs(x, y + 1);
}
void add(int x, int y) {
  if (m[x][y] > 0) {
    int cur = m[x][y];
    if (ci[cur] == 0) {
      tt += cl[cur];
    }
    ci[cur]++;
  } else
    tt++;
}
void rev(int x, int y) {
  if (m[x][y] > 0) {
    int cur = m[x][y];
    ci[cur]--;
    if (ci[cur] == 0) {
      tt -= cl[cur];
    }
  } else
    tt--;
}
int main() {
  scanf("%d %d", &n, &k);
  for (int i = 0; i <= n + 1; i++) {
    m[i][0] = 0;
    m[i][n + 1] = 0;
    m[0][i] = 0;
    m[n + 1][i] = 0;
  }
  for (int i = 1; i <= n * n; i++) v[i] = false;
  for (int i = 1; i <= n; i++) {
    string s;
    cin >> s;
    for (int j = 1; j <= n; j++) m[i][j] = (s[j - 1] == '.') ? -1 : 0;
  }
  for (int i = 1; i <= n; i++)
    for (int j = 1; j <= n; j++)
      if (m[i][j] < 0) {
        cc++;
        cl[cc] = 0;
        ci[cc] = 0;
        dfs(i, j);
      }
  for (int i = 1; i <= k; i++)
    for (int j = 1; j <= k; j++) add(i, j);
  int ans = tt + cnt(1, 1);
  for (int i = 1; i <= n - k + 1; i++) {
    if (i & 1) {
      for (int j = 2; j <= n - k + 1; j++) {
        for (int z = 0; z < k; z++) add(i + z, j + k - 1);
        for (int z = 0; z < k; z++) rev(i + z, j - 1);
        ans = max(ans, tt + cnt(i, j));
      }
      if (i == n - k + 1) break;
      for (int z = 0; z < k; z++) add(i + k, n - k + 1 + z);
      for (int z = 0; z < k; z++) rev(i, n - k + 1 + z);
      ans = max(ans, tt + cnt(i + 1, n - k + 1));
    } else {
      for (int j = n - k; j >= 1; j--) {
        for (int z = 0; z < k; z++) add(i + z, j);
        for (int z = 0; z < k; z++) rev(i + z, j + k);
        ans = max(ans, tt + cnt(i, j));
      }
      if (i == n - k + 1) break;
      for (int z = 0; z < k; z++) add(i + k, 1 + z);
      for (int z = 0; z < k; z++) rev(i, 1 + z);
      ans = max(ans, tt + cnt(i + 1, 1));
    }
  }
  printf("%d\n", ans);
}
