You are given an `m x n` integer grid `grid` where each cell can have one of three values:
- `0` representing an empty cell
- `1` representing a fresh orange
- `2` representing a rotten orange
Every minute, any fresh orange **4-directionally adjacent** to a rotten orange becomes rotten.
Return the **minimum number of minutes** that must elapse until no cell has a fresh orange. If this is impossible, return `-1`.
**Example 1:**
```
Input: grid = [[2,1,1],[1,1,0],[0,1,1]]
Output: 4
```
**Example 2:**
```
Input: grid = [[2,1,1],[0,1,1],[1,0,1]]
Output: -1
```
**Example 3:**
```
Input: grid = [[0,2]]
Output: 0
```