#include <bits/stdc++.h>
using namespace std;
int fx[] = {1, -1, 0, 0};
int fy[] = {0, 0, 1, -1};
long long ar[5000005], br[500005];
vector<int> a, b, c, d;
map<int, int> m1, m2, m3;
char DA[1000][1000];
void Execute() {
  int VALID, n, RIGHT, nb = 0, INCREASING, r, LEFT, mn = 1e9 + 7, DECRESING,
                       START, m = 0, beb, END, x, y, len, UN, TOP;
  cin >> x >> y;
  int x0, y0;
  memset((DA), 0, sizeof((DA)));
  for (int i = 0; i < x; ++i) {
    for (int j = 0; j < y; ++j) {
      cin >> DA[i][j];
    }
  }
  for (int i = 0; i < x; ++i) {
    nb = 0;
    for (int j = 0; j < y; ++j) {
      if (DA[i][j] == '*') {
        int rr = i;
        int cc = j;
        m1[rr]++;
        m2[cc]++;
        a.push_back(rr);
        b.push_back(cc);
        for (int k = 0; k < 4; ++k) {
          x0 = rr + fx[k];
          y0 = cc + fy[k];
          if (x0 >= 0 && x0 <= x && y0 >= 0 && y0 <= y) {
            if (DA[x0][y0] == '*' && x0 >= 0 && x0 <= x && y0 >= 0 && y0 <= y) {
              ++nb;
            }
          }
        }
        if (nb == 4) {
          ++m;
        }
        nb = 0;
      }
    }
  }
  bool OK = true;
  (sort(a.begin(), a.end()),
   a.resize(distance(a.begin(), unique(a.begin(), a.end()))));
  (sort(b.begin(), b.end()),
   b.resize(distance(b.begin(), unique(b.begin(), b.end()))));
  int row = 0, col = 0;
  for (int i = 0; i < a.size(); ++i) {
    if (a[i + 1] - a[i] > 1) {
      OK = false;
      break;
    }
    if (m1[a[i]] > 1) {
      row++;
    }
  }
  for (int i = 0; i < b.size(); ++i) {
    if (b[i + 1] - b[i] > 1) {
      OK = false;
      break;
    }
    if (m2[i] > 1) {
      col++;
    }
  }
  if (row >= 2 || col >= 2) {
    cout << ("NO") << endl;
  } else if (OK == false)
    cout << ("NO") << endl;
  else if (m > 1 || m == 0)
    cout << ("NO") << endl;
  else
    cout << ("YES") << endl;
}
int32_t main() {
  ios_base::sync_with_stdio(false);
  cin.tie(NULL);
  cout.tie(NULL);
  ;
  Execute();
}
