#include <bits/stdc++.h>
using namespace std;
unordered_map<long long, vector<long long>> edges;
long long line_y = 0;
long long line_x = 0;
long long degree[400000] = {0};
long long discovered[400000] = {0};
void make_edge(long long x, long long y) {
  degree[x]++;
  degree[y]++;
  edges[x].push_back(y);
  edges[y].push_back(x);
}
void dfs(long long start) {
  discovered[start] = 1;
  for (auto i : edges[start]) {
    if (discovered[i] == 0) dfs(i);
  }
}
void solve() {
  long long h, w, v_cnt, centre_cnt, line_num, star_cnt;
  line_num = 0;
  v_cnt = centre_cnt = 0;
  cin >> h >> w;
  long long a[h][w];
  for (long long i = 0; i < h; i++) {
    string s;
    cin >> s;
    star_cnt = 0;
    for (long long j = 0; j < s.size(); j++) {
      if (s[j] == '*') {
        star_cnt++;
        v_cnt++;
        a[i][j] = v_cnt;
      } else
        a[i][j] = 0;
    }
    if (star_cnt > 1) line_num++;
  }
  if (line_num > 1) {
    cout << "NO" << endl;
    return;
  }
  for (long long i = 0; i < h - 1; i++) {
    for (long long j = 0; j < w - 1; j++) {
      if (a[i][j] != 0) {
        if (a[i + 1][j] != 0) make_edge(a[i + 1][j], a[i][j]);
        if (a[i][j + 1] != 0) make_edge(a[i][j + 1], a[i][j]);
      }
    }
  }
  dfs(1);
  for (long long i = 1; i <= v_cnt; i++) {
    if (degree[i] == 4) centre_cnt++;
    if (discovered[i] == 0 || centre_cnt > 1) {
      cout << "NO" << endl;
      return;
    }
  }
  if (centre_cnt == 1)
    cout << "YES" << endl;
  else
    cout << "NO" << endl;
}
signed main() {
  solve();
  return 0;
}
