n, m = [int(i) for i in input().split()]
m = []
for i in range(n):
m.append(input())
for i in range(n):
if m[i][0] == '1' or m[i][-1] == '1':
if i == 0 or i == n-1:
print(1)
else:
print(2)
exit()
if '1' in m[i] and (i == 0 or i == n-1):
print(2)
exit()
print(4)
// sai_mun
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define Pis pair<int, string>
#define Pi pair<int, int>
#define Pl pair<ll>
#define rep0(i, n) for (__typeof(n) i = 0; i < (n); i++)
#define rep1(i, n) for (__typeof(n) i = 1; i <= (n); i++)
#define push_back pb
const int INF = 1e9;
const ll INFll = 1e18;
const int MAX = 1e5 + 5;
typedef map<int, int> mii;
typedef map<char, int> mci;
typedef map<string, int> msi;
// freopen("input.txt", "r", stdin);
// freopen("output.txt", "w", stdout);
int main()
{
int n,m,a,ans=0; cin>>n>>m;
rep1(i,n){
rep1(j,m){
cin>>a;
if(a){
if(i==1 || j==1 || i==n || j==m)ans=2;
}
}
}
if(!ans)cout<<4<<endl;
else cout<<ans<<endl;
}
1035. Uncrossed Lines | 328. Odd Even Linked List |
1219. Path with Maximum Gold | 1268. Search Suggestions System |
841. Keys and Rooms | 152. Maximum Product Subarray |
337. House Robber III | 869. Reordered Power of 2 |
1593C - Save More Mice | 1217. Minimum Cost to Move Chips to The Same Position |
347. Top K Frequent Elements | 1503. Last Moment Before All Ants Fall Out of a Plank |
430. Flatten a Multilevel Doubly Linked List | 1290. Convert Binary Number in a Linked List to Integer |
1525. Number of Good Ways to Split a String | 72. Edit Distance |
563. Binary Tree Tilt | 1306. Jump Game III |
236. Lowest Common Ancestor of a Binary Tree | 790. Domino and Tromino Tiling |
878. Nth Magical Number | 2099. Find Subsequence of Length K With the Largest Sum |
1608A - Find Array | 416. Partition Equal Subset Sum |
1446. Consecutive Characters | 1618A - Polycarp and Sums of Subsequences |
1618B - Missing Bigram | 938. Range Sum of BST |
147. Insertion Sort List | 310. Minimum Height Trees |