#include <bits/stdc++.h>
using namespace std;
int main() {
  ios_base::sync_with_stdio(false);
  cin.tie(0);
  cout.tie(0);
  int n, m;
  cin >> n >> m;
  char s[n][m];
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      cin >> s[i][j];
    }
  }
  int w = 0;
  for (int i = 0; i < n; i++) {
    for (int j = 0; j < m; j++) {
      int ans = 0;
      if (j <= m - 2) {
        if (s[i][j + 1] == '*') {
          ans++;
        }
      }
      if (j > 0) {
        if (s[i][j - 1] == '*') {
          ans++;
        }
      }
      if (i > 0) {
        if (s[i - 1][j] == '*') {
          ans++;
        }
      }
      if (i <= n - 2) {
        if (s[i + 1][j] == '*') {
          ans++;
        }
      }
      if (i <= n - 2 && j <= m - 2) {
        if (s[i + 1][j + 1] == '*') {
          ans++;
        }
      }
      if (i <= n - 2 && j >= 1) {
        if (s[i + 1][j - 1] == '*') {
          ans++;
        }
      }
      if (i >= 1 && j <= m - 2) {
        if (s[i - 1][j + 1] == '*') {
          ans++;
        }
      }
      if (i >= 1 && j >= 1) {
        if (s[i - 1][j - 1] == '*') {
          ans++;
        }
      }
      if (ans > 0 && s[i][j] == '.') {
        cout << "NO";
        w++;
        return 0;
      } else if (ans > 0 && s[i][j] != '*') {
        int h = int(s[i][j]) - '0';
        if (h != ans) {
          cout << "NO";
          w++;
          return 0;
        }
      } else if (ans == 0 && s[i][j] != '*' && s[i][j] != '.') {
        w++;
        cout << "NO";
        return 0;
      }
    }
  }
  if (w == 0) cout << "YES";
}
