#include <bits/stdc++.h>
using namespace std;
int n, k, id[502][502], sz[250005], vis[502][502], idnumber, ck[250005],
    curtime;
string str[505];
void dfs(int x, int y, int num) {
  if (!(x >= 0 && x < n && y >= 0 && y < n)) return;
  if (vis[x][y] || str[x][y] == 'X') return;
  vis[x][y] = 1;
  id[x][y] = num;
  sz[num]++;
  dfs(x - 1, y, num);
  dfs(x + 1, y, num);
  dfs(x, y - 1, num);
  dfs(x, y + 1, num);
}
void add(int x, int y, int &sum) {
  if (!(x >= 0 && x < n && y >= 0 && y < n)) return;
  if (str[x][y] == '.') {
    if (ck[id[x][y]] != curtime) {
      ck[id[x][y]] = curtime;
      sum += sz[id[x][y]];
    }
  }
}
int main() {
  cin >> n >> k;
  for (int i = 0; i < n; i++) {
    cin >> str[i];
  }
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < n; j++) {
      if (!vis[i][j]) dfs(i, j, ++idnumber);
    }
  }
  int ans = 0;
  for (int fix = 0; fix + k - 1 < n; fix++) {
    for (int x = fix; x < fix + k; x++) {
      for (int y = 0; y < k; y++) {
        sz[id[x][y]]--;
      }
    }
    for (int my = 0; my + k - 1 < n; my++) {
      ++curtime;
      int s = k * k;
      for (int x = fix; x < fix + k; x++) {
        add(x, my - 1, s);
        add(x, my + k, s);
      }
      for (int y = my; y < my + k; y++) {
        add(fix - 1, y, s);
        add(fix + k, y, s);
      }
      ans = max(ans, s);
      for (int x = fix; x < fix + k; x++) {
        sz[id[x][my]]++;
        sz[id[x][my + k]]--;
      }
    }
    for (int x = fix; x < fix + k; x++) {
      for (int y = n - k + 1; y <= n - 1; y++) {
        sz[id[x][y]]++;
      }
    }
  }
  cout << ans << endl;
}
