编程题
### 问题描述
小蓝是一位勇敢的探险家,他现在站在一个 $n \times m$ 的宝石地图前,充满了宝石的机会。地图上的每个格子都有一个宝石,宝石的价值用整数 $P_{i, j}$ 表示,其中 $1 \leq i \leq n$ 且 $1 \leq j \leq m$,当小蓝站在 $(i,j)$ 时,他**必须**获得当前点的宝石,每个宝石只能获得一次。
小蓝的目标是从 $(1, 1)$ 出发,探索这个地图,一路走到 $(n, m)$,然后再返回到起点 $(1, 1)$,并尽可能使得宝石价值和最大。但是,小蓝有一些特殊的走路规则:
在小蓝第一次到达 $(n,m)$ 之前,他只能向下或者向右走,也就是说只能从 $(n,m)$ 到达 $(n+1,m)$ 或者 $(n,m+1)$, 不允许向左或向上。一旦小蓝到达了 $(n,m)$,他只能向上或者向左走,也就是说只能从 $(n,m)$ 到达 $(n-1,m)$ 或者 $(n,m-1)$,不允许向下或向右。小蓝希望你能帮助他找到一条路径,以获得最大的宝石价值。
给定地图上每个格子的宝石价值 $P_{i, j}$,你能帮助小蓝找到最大宝石价值吗?
### 输入格式
第一行输入两个整数 $n$ 和 $m$,表示地图的行数和列数。
接下来 $n$ 行,每行包含 $m$ 个整数,其中第 $i$ 行第 $j$ 个整数 $P_{i, j}$ 表示格子 $(i, j)$ 上的宝石价值。
### 输出格式
输出一个整数,表示小蓝能够获得的最大宝石价值。
### 样例输入
```
3 3
1 2 3
4 5 6
7 8 9
```
### 样例输出
```
42
```
### 说明
路径为:$(1,1) \to (1,2) \to (2,2) \to (2,3) \to (3,3) \to (3,2) \to (3,1) \to (2,1) \to (1,1)$。
### 评测数据范围
$1 \le n, m \le 50,-100 \le P_{i,j} \le 100$ 。