"use strict"

function Main(input) {
  input = input.trim().split('\n');
  const H = input[0].trim().split(' ').map(Number)[0];
  const W = input[0].trim().split(' ').map(Number)[1];
  const S = input.slice(1).map(val => val.trim().split(''));
  const dh = [-1, -1, -1, 0, 0, 1, 1, 1];
  const dw = [-1, 0, 1, -1, 1, -1, 0, 1];

  // 全てのS[h][w]のパターンを探索
  for (let h=0; h<H; h++) {
    for (let w=0; w<W; w++) {
      // 対象が爆弾(#)の場合、スキップ
      if (S[h][w] === '#') continue;

      // 対象から移動範囲の8マスを探索
      let cnt = 0;
      for (let d=0; d<8; d++) {
        let nh = h + dh[d];
        let nw = w + dw[d];
        
        if (nh >= 0 && nh < H && nw >= 0 && nw < W) {
          // 移動範囲が指定された範囲から外に出ていない場合、
          // 対象の移動範囲8マス内に爆弾(#)があるか否かを探索。
          // 爆弾が存在する場合、cnt(自身の周囲に爆弾数)を+1する。
          let t = S[nh][nw];
          if (t === '#') cnt += 1;
        };
      };

      // 対象をcnt(自身の周囲に爆弾数)に置き換える
      S[h][w] = cnt;
    };
  };

  console.log(S.map(s => s.join('')).join('\n'));
}
Main(require("fs").readFileSync("/dev/stdin", "utf8"));