#include #include #include #include #include #include using namespace std; using i32 = int32_t; using u32 = uint32_t; using i64 = int64_t; using u64 = uint64_t; #define rep(i,n) for(int i=0; i<(int)(n); i++) const i64 INF = 1001001001001001001; using modint = atcoder::static_modint<998244353>; int main(){ int H,W; cin >> H >> W; vector> A(H, vector(W)); rep(y,H) rep(x,W) cin >> A[y][x]; vector> dp0(H, vector(W, -INF)); vector> dp1(H, vector(W, -INF)); dp0[0][0] = dp1[0][0] = A[0][0]; rep(y,H) rep(x,W){ if(y != 0){ dp1[y][x] = max(dp1[y][x], dp0[y-1][x]); if(A[y][x] <= dp0[y-1][x]) dp0[y][x] = max(dp0[y][x], dp0[y-1][x] + A[y][x]); if(A[y][x] <= dp1[y-1][x]) dp1[y][x] = max(dp1[y][x], dp1[y-1][x] + A[y][x]); } if(x != 0){ dp1[y][x] = max(dp1[y][x], dp0[y][x-1]); if(A[y][x] <= dp0[y][x-1]) dp0[y][x] = max(dp0[y][x], dp0[y][x-1] + A[y][x]); if(A[y][x] <= dp1[y][x-1]) dp1[y][x] = max(dp1[y][x], dp1[y][x-1] + A[y][x]); } } bool ans = dp1[H-1][W-1] > 0; cout << (ans ? "Yes\n" : "No\n"); return 0; } struct ios_do_not_sync{ ios_do_not_sync(){ std::ios::sync_with_stdio(false); std::cin.tie(nullptr); } } ios_do_not_sync_instance;