"use strict";

var main = function main(input) {
  var args = input.split('\n');
  var H = parseInt(args[0].split(' ')[0], 10);
  var W = parseInt(args[0].split(' ')[1], 10);
  var S = [];

  for (var i = 0; i < H; i++) {
    S.push(args[i + 1]);
  }

  var result = Array.from(new Array(H), function () {
    return new Array(W).fill(0);
  });

  for (var _i = 0; _i < S.length; _i++) {
    var line = S[_i];

    for (var j = 0; j < line.length; j++) {
      if (line.charAt(j) == '#') {
        result[_i][j] = '#'; // 上に波及、一番上の時(i == 0)はやらない

        if (_i != 0) {
          var up = S[_i - 1]; // 左に波及、一番左の時(j == 0)はやらない

          if (j != 0) {
            if (up.charAt(j - 1) != '#') {
              result[_i - 1][j - 1]++;
            }
          } // 右に波及、一番右の時(j == W - 1)はやらない


          if (j != W - 1) {
            if (up.charAt(j + 1) != '#') {
              result[_i - 1][j + 1]++;
            }
          } // 真ん中に波及


          if (up.charAt(j) != '#') {
            result[_i - 1][j]++;
          }
        } // 下に波及、一番下の時(i == H - 1)はやらない


        if (_i != H - 1) {
          var down = S[_i + 1]; // 左に波及、一番左の時(j == 0)はやらない

          if (j != 0) {
            if (down.charAt(j - 1) != '#') {
              result[_i + 1][j - 1]++;
            }
          } // 右に波及、一番右の時(j == W - 1)はやらない


          if (j != W - 1) {
            if (down.charAt(j + 1) != '#') {
              result[_i + 1][j + 1]++;
            }
          } // 真ん中に波及


          if (down.charAt(j) != '#') {
            result[_i + 1][j]++;
          }
        } // 左右に波及
        // 左に波及、一番左の時(j == 0)はやらない


        if (j != 0) {
          if (line.charAt(j - 1) != '#') {
            result[_i][j - 1]++;
          }
        } // 右に波及、一番右の時(j == W - 1)はやらない


        if (j != W - 1) {
          if (line.charAt(j + 1) != '#') {
            result[_i][j + 1]++;
          }
        }
      }
    }
  }

  result.forEach(function (elem) {
    return console.log(elem.join(''));
  });
};

main(require('fs').readFileSync('/dev/stdin', 'utf-8'));