input: Write a Python function named calculate_max_score which takes a 2D list of integers representing a matrix grid. You can move from one cell to another that is either below or to the right (not necessarily adjacent). The score for moving from a cell with value c1 to a cell with value c2 is calculated as c2 - c1. You start at any cell and must make at least one move. The function should return the highest possible total score you can achieve.
  
  Examples:
  >>> grid = [[9,5,7,3],[8,9,6,1],[6,7,14,3],[2,5,3,1]]
  9
  >>> grid = [[4,3,2],[3,2,1]]
  -1
  
  Constraints:
  - m == grid.length
  - n == grid[i].length
  - 2 <= m, n <= 1000
  - 4 <= m * n <= 10^5
  - 1 <= grid[i][j] <= 10^5
output: def calculate_max_score(grid):
      def dfs(row, col, start_val, score):
          if row == len(grid) - 1 and col == len(grid[0]) - 1:
              return score
          max_score = float('-inf')
          if row + 1 < len(grid):
              max_score = max(max_score, dfs(row + 1, col, grid[row][col], score + (grid[row + 1][col] - grid[row][col])))
          if col + 1 < len(grid[0]):
              max_score = max(max_score, dfs(row, col + 1, grid[row][col], score + (grid[row][col + 1] - grid[row][col])))
          return max_score
      
      max_score = float('-inf')
      for row in range(len(grid)):
          for col in range(len(grid[0])):
              if row + 1 < len(grid):
                  max_score = max(max_score, dfs(row + 1, col, grid[row][col], grid[row + 1][col] - grid[row][col]))
              if col + 1 < len(grid[0]):
                  max_score = max(max_score, dfs(row, col + 1, grid[row][col], grid[row][col + 1] - grid[row][col]))
      
      return max_score