text: #pragma GCC optimize("Ofast")
  #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,avx2,fma")
  #pragma GCC optimize("unroll-loops")
  #include <bits/stdc++.h>
  #include <complex>
  #include <queue>
  #include <set>
  #include <unordered_set>
  #include <list>
  #include <chrono>
  #include <random>
  #include <iostream>
  #include <algorithm>
  #include <cmath>
  #include <string>
  #include <vector>
  #include <map>
  #include <unordered_map>
  #include <stack>
  #include <iomanip>
  #include <fstream>
  
  using namespace std;
  typedef unsigned long long ull;
  typedef long long ll;
  typedef long double ld;
  typedef pair<int, int> p32;
  typedef pair<ll, ll> p64;
  typedef pair<double, double> pdd;
  typedef vector<ll> v64;
  typedef vector<int> v32;
  typedef vector<vector<int>> vv32;
  typedef vector<vector<ll>> vv64;
  typedef vector<vector<p64>> vvp64;
  typedef vector<p64> vp64;
  typedef vector<p32> vp32;
  ll MOD = 1000000007;
  double eps = 1e-12;
  #define forn(i, n) for (ll i = 0; i < n; i++)
  #define forsn(i, s, e) for (ll i = s; i < e; i++)
  #define rforn(i, s) for (ll i = s; i >= 0; i--)
  #define rforsn(i, s, e) for (ll i = s; i >= e; i--)
  #define ln "\n"
  #define dbg(x) cout << #x << " = " << x << ln
  #define mp make_pair
  #define pb push_back
  #define fi first
  #define se second
  #define INF 2e18
  #define fast_cin()                    \
      ios_base::sync_with_stdio(false); \
      cin.tie(NULL);                    \
      cout.tie(NULL)
  #define all(x) (x).begin(), (x).end()
  #define al(arr, n) arr, arr + n
  #define sz(x) ((ll)(x).size())
  
  void solve()
  {
      int n, m;
      cin >> n >> m;
      int arr[n][m];
      // ll sum = 0;
      forn(i, n)
      {
          forn(j, m)
          {
              cin >> arr[i][j];
          }
      }
      // from right to left
      ll sum = 0;
      for (int i = n - 1; i >= 0; i--)
      {
          for (int j = m - 1; j >= 0; j--)
          {
              if (arr[i][j] == 0)
              {
                  int x = arr[i][j + 1] - 1;
                  int y = arr[i + 1][j] - 1;
                  arr[i][j] = min(x, y);
              }
              sum += arr[i][j];
          }
      }
      // return stage
      for (int i = 0; i < n; i++)
      {
          for (int j = 0; j < m - 1; j++)
          {
              if (arr[i][j] >= arr[i][j + 1])
              {
                  cout << -1 << endl;
                  return;
              }
          }
      }
      // return stage
      for (int i = 0; i < m; i++)
      {
          for (int j = 0; j < n - 1; j++)
          {
              if (arr[j][i] >= arr[j + 1][i])
              {
                  cout << -1 << endl;
                  return;
              }
          }
      }
  
      cout << sum << ln;
  }
  int main()
  {
      fast_cin();
      // ll t;
      // cin >> t;
      // for (int it = 1; it <= t; it++)
      // {
      solve();
      // }
      return 0;
  }