Write an efficient algorithm that searches for a value in an `m x n`

matrix. If the target value is in the matrix, return `true`

; otherwise, return `false`

.

This matrix has the following properties:

- Integers in each row are sorted from left to right.
- The first integer of each row is greater than the last integer of the previous row.

The algorithm should have `O(log(n) + log(m))`

running time complexity.

Example

```
[
[1, 3, 5, 7],
[10, 11, 16, 20],
[23, 30, 34, 50]
]
target = 3 => true
target = 2 => false
```