#include <bits/stdc++.h>
using namespace std;
const int N = 507;
const int DX[4] = {1, -1, 0, 0};
const int DY[4] = {0, 0, 1, -1};
int n, k;
char a[N][N];
int comp[N][N], components;
bool used[N][N];
int sz[N * N];
int curr, ans;
int current_time, when[N * N];
bool in(int r, int c) { return r >= 1 && r <= n && c >= 1 && c <= n; }
void dfs(int r, int c) {
  used[r][c] = true;
  comp[r][c] = components;
  ++sz[components];
  int i, nr, nc;
  for (i = 0; i < 4; i++) {
    nr = DX[i] + r;
    nc = DY[i] + c;
    if (in(nr, nc) && !used[nr][nc] && a[nr][nc] == '.') {
      dfs(nr, nc);
    }
  }
}
void add(int r, int c) {
  if (!in(r, c)) return;
  if (a[r][c] != '.') return;
  if (when[comp[r][c]] == current_time) return;
  curr += sz[comp[r][c]];
  when[comp[r][c]] = current_time;
}
int main() {
  int i, j, z, l;
  scanf("%d %d", &n, &k);
  for (i = 1; i <= n; i++) {
    scanf("%s", a[i] + 1);
  }
  for (i = 1; i <= n; i++) {
    for (j = 1; j <= n; j++) {
      if (!used[i][j] && a[i][j] == '.') {
        ++components;
        dfs(i, j);
      }
    }
  }
  for (i = 1; i + k - 1 <= n; i++) {
    curr = 0;
    for (z = i; z <= i + k - 1; z++) {
      for (j = 1; j <= k; j++) {
        --sz[comp[z][j]];
      }
    }
    ++current_time;
    for (j = 1; j <= k; j++) {
      add(i - 1, j);
      add(i + k, j);
    }
    for (z = i; z <= i + k - 1; z++) {
      add(z, 0);
      add(z, k + 1);
    }
    ans = max(ans, curr);
    for (j = 2; j + k - 1 <= n; j++) {
      ++current_time;
      curr = 0;
      for (z = i; z <= i + k - 1; z++) {
        ++sz[comp[z][j - 1]];
        --sz[comp[z][j + k - 1]];
      }
      for (l = j; l <= j + k - 1; l++) {
        add(i - 1, l);
        add(i + k, l);
      }
      for (z = i; z <= i + k - 1; z++) {
        add(z, j - 1);
        add(z, j + k);
      }
      ans = max(ans, curr);
    }
    for (j = n; j >= n - k + 1; j--) {
      for (z = i; z <= i + k - 1; z++) {
        ++sz[comp[z][j]];
      }
    }
  }
  printf("%d\n", ans + k * k);
  return 0;
}
