I wish I could draw here or attach a file.
But the basic idea is simply move along the diagonal from [0][0] to [min(m-1,n-1)][min(m-1,n-1)]. After this if m>n move down the rows with the last element of the rows starting from [min(m-1,n-1)][n-1] to [m-1][n-1] Else if you n>m move along the last elements of each column starting from [m-1][[min(m-1,n-1)] to [m-1][n-1].
Observation{ along the defined diagonal, let A[i][j] and A[k][l] be 2 consecutive elements such that A[i][j]<key<A[k][l], then key can not be part of upper-left-rectangular-sub-matrix A[0][0] <-> A[i][j] as all these elements are smaller than A[i][j] which is < k. Also, key can't be in the lower-right-rectangular-sub-matrix from A[k][l] <-> A[m-1][n-1]. as all of these are greater than A[k][l] and key < A[k][l]. key can however lie in the lower-left-rectangular-sub-matrix A[k][0] <-> A[m][l-1] or upper-right-rectangular-sub-matrix A[0][l] <-> A[k-1][n-1].
With the above observation, we solve this problem recursively. We look in the body diagonal, if we find that key > last element of diagonal, then we return false. If we find the key, we return true. Else we find the first element which is bigger than key. We now recursively call search in matrices upper-right-rectangular-sub-matrix and lower-left-rectangular-sub-matrix. If any of these sub matrices return true, we return true. Else if both of these matrices are trivially small or both return false, then the answer returned is false.
Let me know if there is something smarter. The complexity of this algorithm is O(log(max(m,n))