int sum2_col[MAXN][MAXN]; int sum2_row[MAXN][MAXN];
int n, k;
inlineboolcan_erase_row(int i, int j){ return (sum_row[i][n] != 0) && (sum_row[i][j - 1] == 0) && (sum_row[i][n] == sum_row[i][j + k - 1]); }
inlineboolcan_erase_col(int i, int j){ return (sum_col[n][j] != 0) && (sum_col[i - 1][j] == 0) && (sum_col[n][j] == sum_col[i + k - 1][j]); }
intmain(){ cin >> n >> k; for (int i = 1; i <= n; i++) { scanf("%s", map[i] + 1); } for (int i = 1; i <= n; i++) { sum_row[i][0] = 0; for (int j = 1; j <= n; j++) { sum_row[i][j] = sum_row[i][j - 1] + ((map[i][j] == 'B') ? 1 : 0); } } for (int j = 1; j <= n; j++) { sum_col[0][j] = 0; for (int i = 1; i <= n; i++) { sum_col[i][j] = sum_col[i - 1][j] + ((map[i][j] == 'B') ? 1 : 0); } }
for (int i = 1; i + k - 1 <= n; i++) { deque<int> q; for (int j = 1; j < k; j++) { if (can_erase_col(i, j)) q.push_back(j); } for (int j = k; j <= n; j++) { int seg_head = j - k + 1; while (!q.empty() && q.front() < seg_head) q.pop_front(); if (can_erase_col(i, j)) q.push_back(j); sum2_row[i][seg_head] = q.size(); } }
for (int j = 1; j + k - 1 <= n; j++) { deque<int> q; for (int i = 1; i < k; i++) { if (can_erase_row(i, j)) q.push_back(i); } for (int i = k; i <= n; i++) { int seg_head = i - k + 1; while (!q.empty() && q.front() < seg_head) q.pop_front(); if (can_erase_row(i, j)) q.push_back(i); sum2_col[seg_head][j] = q.size(); } }
int ans = 0; for (int i = 1; i + k - 1 <= n; i++) { for (int j = 1; j + k - 1 <= n; j++) { ans = max(ans, sum2_col[i][j] + sum2_row[i][j]); } } for (int i = 1; i <= n; i++) { if (sum_row[i][n] == 0) ans++; if (sum_col[n][i] == 0) ans++; } cout << ans << endl; return0; }