#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    int x = -1, y = -1, x1 = -1, y1 = -1;
    int num = 0;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
            {
                if(num == 0)
                {
                    x = i;
                    y = j;
                }
                else if(num == 1)
                {
                    if(i == x)
                    {
                        x = i;
                        y = -1;
                    }
                    else if(j == y)
                    {
                        x = -1;
                        y = j;
                    }
                    else
                    {
                        x1 = i;
                        y1 = j;
                    }
                }
                else if(num == 2 && x1 != -1)
                {
                    if(i == x1)
                    {
                        if(j == y)
                            x = i;
                        else
                        {
                            cout << "NO";
                            exit(0);
                        }
                    }
                    else if(i == x)
                    {
                        if(j == y1)
                            y = j;
                        else
                        {
                            cout << "NO";
                            exit(0);
                        }
                    }
                }
                else
                {
                    if(x != -1 && i == x)
                        ;
                    else if(y != -1 && y == j)
                        ;
                    else if(x != -1 && y == -1 && i != x)
                        y = j;
                    else if(y != -1 && x == -1 && j != y)
                        x = i;
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                if(num < 3)
                    ++num;
            }
        }

    cout << "YES\n";
    if(x == -1)
        cout << 1;
    else
        cout << (x + 1);

    cout << " ";

    if(y == -1)
        cout << 1;
    else
        cout << (y + 1);

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    int x = -1, y = -1, x1 = -1, y1 = -1;
    int num = 0;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
            {
                if(num == 0)
                {
                    x = i;
                    y = j;
                }
                else if(num == 1)
                {
                    if(i == x)
                    {
                        x = i;
                        y = -1;
                    }
                    else if(j == y)
                    {
                        x = -1;
                        y = j;
                    }
                    else
                    {
                        x1 = i;
                        y1 = j;
                    }
                }
                else if(num == 2 && x1 != -1)
                {
                    if(i == x1)
                    {
                        if(j == y)
                            x = i;
                        else
                        {
                            cout << "NO";
                            exit(0);
                        }
                    }
                    else if(i == x)
                    {
                        if(j == y1)
                            y = j;
                        else
                        {
                            cout << "NO";
                            exit(0);
                        }
                    }
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                else
                {
                    if(x != -1 && i == x)
                        ;
                    else if(y != -1 && y == j)
                        ;
                    else if(x != -1 && y == -1 && i != x)
                        y = j;
                    else if(y != -1 && x == -1 && j != y)
                        x = i;
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                if(num < 3)
                    ++num;
            }
        }

    cout << "YES\n";
    if(x == -1)
        cout << 1;
    else
        cout << (x + 1);

    cout << " ";

    if(y == -1)
        cout << 1;
    else
        cout << (y + 1);

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    int x = -1, y = -1, x1 = -1, y1 = -1;
    int num = 0;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
            {
                if(num == 0)
                {
                    x = i;
                    y = j;
                }
                else if(num == 1)
                {
                    if(i == x)
                    {
                        x = i;
                        y = -1;
                    }
                    else if(j == y)
                    {
                        x = -1;
                        y = j;
                    }
                    else
                    {
                        x1 = i;
                        y1 = j;
                    }
                }
                else if(num == 2 && x1 != -1)
                {
                    if(i == x1)
                    {
                        if(j == y)
                            x = i;
                        else
                        {
                            cout << "NO";
                            exit(0);
                        }
                    }
                    else if(i == x)
                    {
                        if(j == y1)
                            y = j;
                        else
                        {
                            cout << "NO";
                            exit(0);
                        }
                    }
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                else
                {
                    if(x != -1 && i == x)
                        ;
                    else if(y != -1 && y == j)
                        ;
                    else if(x != -1 && y == -1 && i != x)
                        y = j;
                    else if(y != -1 && x == -1 && j != y)
                        x = i;
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                if(num < 3)
                    ++num;
            }
        }

    if(num == 1)
        x = x1;

    cout << "YES\n";
    if(x == -1)
        cout << 1;
    else
        cout << (x + 1);

    cout << " ";

    if(y == -1)
        cout << 1;
    else
        cout << (y + 1);

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    int x = -1, y = -1;
    int num = 0;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
            {
                if(num == 0)
                {
                    x = i;
                    y = j;
                }
                else if(num == 1)
                {
                    if(i == x)
                    {
                        x = i;
                        y = -1;
                    }
                    else if(j == y)
                    {
                        x = -1;
                        y = j;
                    }
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                else
                {
                    if(x != -1 && i == x)
                        ;
                    else if(y != -1 && y == j)
                        ;
                    else if(x != -1 && y == -1 && i != x)
                        y = j;
                    else if(y != -1 && x == -1 && j != y)
                        x = i;
                    else
                    {
                        cout << "NO";
                        exit(0);
                    }
                }
                if(num < 2)
                    ++num;
            }
        }

    cout << "YES\n";
    if(x == -1)
        cout << 1;
    else
        cout << (x + 1);

    cout << " ";

    if(y == -1)
        cout << 1;
    else
        cout << (y + 1);

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    vector<pair<int, int>> dots;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
                dots.emplace_back(i, j);
        }

    int x, y;
    if(dots.size() < 3)
    {
        if(dots.empty())
            cout << "YES\n1 1";
        else if(dots.size() == 1)
            cout << "YES\n1 " << (dots[0].first + 1);
        else
            cout << "YES\n" << (dots[0].second + 1) << " " << (dots[1].first + 1);
    }
    else
    {
        if(dots[0].first == dots[1].first)
        {
            int i;
            for(i = 1; dots[i].first == dots[i - 1].first && i < dots.size(); ++i);

            if(i != dots.size())
            {
                y = dots[0].first;
                x = dots[i].second;
                for(int j = i; j < dots.size(); ++j)
                    if(dots[j].first != y && dots[j].second != x)
                    {
                        cout << "NO";
                        exit(0);
                    }
                cout << "YES\n" << (x + 1) << " " << (y + 1);
            }
            else
                cout << "YES\n1 " << (dots[0].first + 1);
        }
        else if(dots[0].second == dots[1].second)
        {
            int i;
            for(i = 1; dots[i].second == dots[i - 1].second && i < dots.size(); ++i);

            if(i != dots.size())
            {
                y = dots[i].first;
                x = dots[0].second;
                for(int j = i; j < dots.size(); ++j)
                    if(dots[j].first != y && dots[j].second != x)
                    {
                        cout << "NO";
                        exit(0);
                    }
                cout << "YES\n" << (x + 1) << " " << (y + 1);
            }
            else
                cout << "YES\n" << (dots[0].second + 1) << " 1";
        }
        else
        {
            if(dots[0].first == dots[2].first || dots[1].second == dots[2].second)
            {
                x = dots[1].second;
                y = dots[0].first;
            }
            else if(dots[1].first == dots[2].first || dots[0].second == dots[2].second)
            {
                x = dots[0].second;
                y = dots[1].first;
            }
            else
            {
                cout << "NO";
                exit(0);
            }

            for(int j = 0; j < dots.size(); ++j)
                if(dots[j].first != y && dots[j].second != x)
                {
                    cout << "NO";
                    exit(0);
                }
            cout << "YES\n" << (x + 1) << " " << (y + 1);
        }
    }

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    vector<pair<int, int>> dots;
    vector<char> hor(n, false), vert(m, false);
    int x = -1, y = -1;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < n; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
            {
                if(hor[i])
                    x = i;
                if(vert[j])
                    y = j;

                hor[i] = vert[j] = true;
                dots.emplace_back(i, j);
            }
        }

    if(x != -1 && y != -1)
        for(auto dot : dots)
        {
            if(dot.first != x && dot.second != y)
            {
                cout << "NO";
                exit(0);
            }
        }

    cout << "YES\n";
    if(x == -1)
        cout << 1;
    else
        cout << (x + 1);

    cout << " ";

    if(y == -1)
        cout << 1;
    else
        cout << (y + 1);

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    vector<pair<int, int>> dots;
    vector<char> hor(n, false), vert(m, false);
    int x = -1, y = -1;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
            {
                if(hor[i])
                    x = i;
                if(vert[j])
                    y = j;

                hor[i] = vert[j] = true;
                dots.emplace_back(i, j);
            }
        }

    if(x != -1 && y != -1)
        for(auto dot : dots)
        {
            if(dot.first != x && dot.second != y)
            {
                cout << "NO";
                exit(0);
            }
        }

    cout << "YES\n";
    if(x == -1)
        cout << 1;
    else
        cout << (x + 1);

    cout << " ";

    if(y == -1)
        cout << 1;
    else
        cout << (y + 1);

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m;

    cin >> n >> m;

    vector<pair<int, int>> dots;

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            char c;
            cin >> c;
            if(c == '*')
                dots.emplace_back(i, j);
        }

    int x = -1, y = -1;
    if(dots.size() < 3)
    {
        if(dots.empty())
            cout << "YES\n1 1";
        else if(dots.size() == 1)
            cout << "YES\n1 " << (dots[0].second + 1);
        else
            cout << "YES\n" << (dots[0].first + 1) << " " << (dots[1].second + 1);
    }
    else
    {
        if(dots[0].first == dots[1].first)
        {
            int i;
            for(i = 1; dots[i].first == dots[i - 1].first && i < dots.size(); ++i);

            if(i != dots.size())
            {
                y = dots[0].first;
                x = dots[i].second;
                for(int j = i; j < dots.size(); ++j)
                    if(dots[j].first != y && dots[j].second != x)
                    {
                        cout << "NO";
                        exit(0);
                    }
                cout << "YES\n" << (x + 1) << " " << (y + 1);
            }
            else
                cout << "YES\n1 " << (dots[0].first + 1);
        }
        else if(dots[0].second == dots[1].second)
        {
            int i;
            for(i = 1; dots[i].second == dots[i - 1].second && i < dots.size(); ++i);

            if(i != dots.size())
            {
                y = dots[i].first;
                x = dots[0].second;
                for(int j = i; j < dots.size(); ++j)
                    if(dots[j].first != y && dots[j].second != x)
                    {
                        cout << "NO";
                        exit(0);
                    }
                cout << "YES\n" << (x + 1) << " " << (y + 1);
            }
            else
                cout << "YES\n" << (dots[0].second + 1) << " 1";
        }
        else
        {
            if(dots[0].first == dots[2].first || dots[1].second == dots[2].second)
            {
                x = dots[1].second;
                y = dots[0].first;
            }
            else if(dots[1].first == dots[2].first || dots[0].second == dots[2].second)
            {
                x = dots[0].second;
                y = dots[1].first;
            }
            else
            {
                cout << "NO";
                exit(0);
            }
            for(int j = 0; j < dots.size(); ++j)
                if(dots[j].first != y && dots[j].second != x)
                {
                    cout << "NO";
                    exit(0);
                }
            cout << "YES\n" << (x + 1) << " " << (y + 1);
        }
    }

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m, walls = 0;

    cin >> n >> m;

    vector<int> hor(m, 0), vert(n, 0);
    vector<string> field(n);

    for(int i = 0; i < n; ++i)
    {
        cin >> field[i];
        for(int j = 0; j < m; ++j)
            if(field[i][j] == '*')
            {
                ++hor[j];
                ++vert[i];
                ++walls;
            }
    }

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            if(hor[j] + vert[i] + (field[i][j] == '*' ? -1 : 0) == walls)
            {
                cout << "YES\n" << (i + 1) << " " << (j + 1);
                return 0;
            }
        }

    cout << "NO";

    return 0;
}


#include <iostream>
#include <string>
#include <vector>
#include <limits>
#include <algorithm>
#include <queue>
#include <array>

using namespace std;

int main()
{
    ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);

    int n, m, walls = 0;

    cin >> n >> m;

    vector<int> hor(m, 0), vert(n, 0);
    vector<string> field(n);

    for(int i = 0; i < n; ++i)
    {
        cin >> field[i];
        for(int j = 0; j < m; ++j)
            if(field[i][j] == '*')
            {
                ++hor[j];
                ++vert[i];
                ++walls;
            }
    }

    for(int i = 0; i < n; ++i)
        for(int j = 0; j < m; ++j)
        {
            if(hor[j] + vert[i] + (field[i][j] == '*' ? -1 : 0) == walls)
            {
                cout << "YES\n" << i << " " << j;
                return 0;
            }
        }

    cout << "NO";

    return 0;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
char map[N][N];
int visit1[N],visit2[N];

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;

	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j];
			if(map[i][j] == '*')
			{
				all++;
				visit1[i]++;
				visit2[j]++;
			}
		}
	}

	int max1 = 0, f1 = 0, max2 = 0, f2 = 0, sum = 0;
	for(i = 0; i < a; i++)
		if(visit1[i] >= max1)
		{
			max1 = visit1[i];
			f1 = i;
		}
	for(j = 0; j < b; j++)
		if(visit2[j] > max2)
		{
			max2 = visit2[j];
			f2 = j;
		}

	if(map[f1][f2] == '*')
		visit1[f1]--;

	//printf("v1 = %d v2 = %d\n",visit1[f1],visit2[f2]);

	if(visit1[f1] == all)
		printf("YES\n%d 1\n",f1+1);
	else if(visit2[f2] == all)
		printf("YES\n1 %d\n",f2+1);
	else if(visit1[f1] + visit2[f2] == all)
	{
		printf("YES\n%d %d\n",f1+1,f2+1);
	}
	else
	{
		printf("NO\n");
	}
return 0;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
char map[N][N];
int visit1[N],visit2[N],visit[N][N];

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;
	memset(visit1,0,sizeof(visit1));
	memset(visit2,0,sizeof(visit2));
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j];
			if(map[i][j] == '*')
			{
				all++;
				visit1[i]++;
				visit2[j]++;
			}
		}
	}

	int f = 0;
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			int t = visit1[i] + visit2[j];
			if(map[i][j] == '*')
				t--;
			if(t == all)
			{
				printf("YES\n%d %d\n",i+1,j+1);
				f = 1;
				break;
			}
		}
		if(f == 1)
			break;
	}

	if(f = 0)
		cout<<"NO"<<endl;
return 0;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 1
using namespace std;

int a,b,all;
struct Map{
	char symbol;
	int sum;
}map[N][N];

void ww(int,int);
void ss(int,int);
void aa(int,int);
void dd(int,int);

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;
	for(i = 0; i < a; i++)
		for(j = 0; j < b; j++)
		{
			scanf("%c",&map[i][j].symbol);
			if(map[i][j].symbol == '*')
				all++;
		}

	int f = 0;
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			ww(i,j);ss(i,j);aa(i,j);dd(i,j);
			if(map[i][j].symbol == '*')
				map[i][j].sum -= 3;
			if(map[i][j].sum == all)
			{
				f = 1;
				printf("YES\n%d %d\n",i+1,j+1);
				break;
			}
		}
	if(f == 1)
		break;
	}

	if(f == 0)
		printf("NO\n");
return 0;
}

void ww(int i, int j)
{
	for(int x = i; x >= 0; x--)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void ss(int i,int j)
{
	for(int x = i; x < a; x++)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void aa(int i,int j)
{
	for(int y = j; y >= 0; y--)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}
void dd(int i,int j)
{
	for(int y = j; y < b; y++)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
struct Map{
	char symbol;
	int sum;
}map[N][N];

void ww(int,int);
void ss(int,int);
void aa(int,int);
void dd(int,int);

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;
	for(i = 0; i < a; i++)
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j].symbol;
			if(map[i][j].symbol == '*')
				all++;
		}

	int f = 0;
	for(i = 0; i < a; i++)
		for(j = 0; j < b; j++)
		{
			ww(i,j);ss(i,j);aa(i,j);dd(i,j);
			if(map[i][j].symbol == '*')
				map[i][j].sum -= 3;
			if(map[i][j].sum == all)
			{
				f = 1;
				printf("YES\n%d %d\n",i+1,j+1);
				break;
			}
			if(f == 1)
				break;
		}

	if(f == 0)
		printf("NO\n");
return 0;
}

void ww(int i, int j)
{
	for(int x = i; x >= 0; x--)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void ss(int i,int j)
{
	for(int x = i; x < a; x++)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void aa(int i,int j)
{
	for(int y = j; y >= 0; y--)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}
void dd(int i,int j)
{
	for(int y = j; y < b; y++)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
struct Map{
	char symbol;
	int sum;
}map[N][N];

void ww(int,int);
void ss(int,int);
void aa(int,int);
void dd(int,int);

int main()
{
	int i,j,k,cutT;
	cin>>a>>b;
	all = 0;
	getchar();
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			scanf("%c",&map[i][j].symbol);
			map[i][j].sum = 0;
			if(map[i][j].symbol == '*')
			{
				all++;
				cutT = j;
			}
		}
	getchar();
	}

	int f = 0;
	for(i = 0; i < a; i++)
	{
		if(all == 0)
			break;
		if(all == 1)
		{
			f = 1;
			printf("YES\n1 %d\n",cutT+1);
			break;
		}
		for(j = 0; j < b; j++)
		{
			ww(i,j);ss(i,j);aa(i,j);dd(i,j);
			if(map[i][j].symbol == '*')
				map[i][j].sum -= 3;
			if(map[i][j].sum == all)
			{
				f = 1;
				printf("YES\n%d %d\n",i+1,j+1);
				break;
			}
		}
	if(f == 1)
		break;
	}

	if(f == 0)
		printf("NO\n");
return 0;
}

void ww(int i, int j)
{
	for(int x = i; x >= 0; x--)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void ss(int i,int j)
{
	for(int x = i; x < a; x++)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void aa(int i,int j)
{
	for(int y = j; y >= 0; y--)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}
void dd(int i,int j)
{
	for(int y = j; y < b; y++)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
struct Map{
	char symbol;
	int sum;
}map[N][N];

void ww(int,int);
void ss(int,int);
void aa(int,int);
void dd(int,int);

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;
	for(i = 0; i < a; i++)
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j].symbol;
			if(map[i][j].symbol == '*')
				all++;
		}

	int f = 0;
	for(i = 0; i < a; i++)
	{
			for(j = 0; j < b; j++)
		{
			ww(i,j);ss(i,j);aa(i,j);dd(i,j);
			if(map[i][j].symbol == '*')
				map[i][j].sum -= 3;
			if(map[i][j].sum == all)
			{
				f = 1;
				printf("YES\n%d %d\n",i+1,j+1);
				break;
			}
		}
	if(f == 1)
		break;
	}

	if(f == 0)
		printf("NO\n");
return 0;
}

void ww(int i, int j)
{
	for(int x = i; x >= 0; x--)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void ss(int i,int j)
{
	for(int x = i; x < a; x++)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void aa(int i,int j)
{
	for(int y = j; y >= 0; y--)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}
void dd(int i,int j)
{
	for(int y = j; y < b; y++)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
char map[N][N];
int visit1[N],visit2[N];

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;

	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j];
			if(map[i][j] == '*')
			{
				all++;
				visit1[i]++;
				visit2[j]++;
			}
		}
	}

	int max1 = 0, f1 = 0, max2 = 0, f2 = 0, sum = 0;
	for(i = 0; i < a; i++)
		if(visit1[i] > max1)
		{
			max1 = visit1[i];
			f1 = i;
		}
	for(j = 0; j < b; j++)
		if(visit2[j] > max2)
		{
			max2 = visit2[j];
			f2 = j;
		}

	if(map[f1][f2] == '*')
		visit1[f1]--;

	if(visit1[f1] == all)
		printf("YES\n%d 1\n",f1+1);
	else if(visit2[f2] == all)
		printf("YES\n1 %d\n",f2+1);
	else if(visit1[f1] + visit2[f2] == all)
	{
		printf("YES\n%d %d\n",f1+1,f2+1);
	}
	else
	{
		printf("NO\n");
	}
return 0;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
struct Map{
	char symbol;
	int sum;
}map[N][N];

void ww(int,int);
void ss(int,int);
void aa(int,int);
void dd(int,int);

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;
	getchar();
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			scanf("%c",&map[i][j].symbol);
			map[i][j].sum = 0;
			if(map[i][j].symbol == '*')
				all++;
		}
	getchar();
	}
	int f = 0;
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			ww(i,j);ss(i,j);aa(i,j);dd(i,j);
			if(map[i][j].symbol == '*')
				map[i][j].sum -= 3;
			if(map[i][j].sum == all)
			{
				f = 1;
				printf("YES\n%d %d\n",i+1,j+1);
				break;
			}
		}
	if(f == 1)
		break;
	}

	if(f == 0)
		printf("NO\n");
return 0;
}

void ww(int i, int j)
{
	for(int x = i; x >= 0; x--)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void ss(int i,int j)
{
	for(int x = i; x < a; x++)
		if(map[x][j].symbol == '*')
			map[i][j].sum++;
}
void aa(int i,int j)
{
	for(int y = j; y >= 0; y--)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}
void dd(int i,int j)
{
	for(int y = j; y < b; y++)
		if(map[i][y].symbol == '*')
			map[i][j].sum++;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
char map[N][N];
int visit1[N],visit2[N],visit[N][N];

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;
	memset(visit1,0,sizeof(visit1));
	memset(visit2,0,sizeof(visit2));
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j];
			if(map[i][j] == '*')
			{
				all++;
				visit1[i]++;
				visit2[j]++;
			}
		}
	}

	int f = 0;
	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			int t = visit1[i] + visit2[j];
			if(map[i][j] == '*')
				t--;
			if(t == all)
			{
				printf("YES\n%d %d\n",i+1,j+1);
				f = 1;
				break;
			}
		}
		if(f == 1)
			break;
	}

	if(f == 0)
		cout<<"NO"<<endl;
return 0;
}


#include<iostream>
#include<cstring>
#include<stdio.h>
#define max(a,b)  (a > b ? a : b)
#define min(a,b)  (a < b ? a : b)
#define N 1000 + 10
using namespace std;

int a,b,all;
char map[N][N];
int visit1[N],visit2[N];

int main()
{
	int i,j,k;
	cin>>a>>b;
	all = 0;

	for(i = 0; i < a; i++)
	{
		for(j = 0; j < b; j++)
		{
			cin>>map[i][j];
			if(map[i][j] == '*')
			{
				all++;
				visit1[i]++;
				visit2[j]++;
			}
		}
	}

	int max1 = 0, f1 = 0, max2 = 0, f2 = 0, sum = 0;
	for(i = 0; i < a; i++)
		if(visit1[i] >= max1)
		{
			max1 = visit1[i];
			f1 = i;
		}
	for(j = 0; j < b; j++)
		if(visit2[j] >= max2)
		{
			max2 = visit2[j];
			f2 = j;
		}

	if(map[f1][f2] == '*' && visit1[f1] != 1)
		visit1[f1]--;

	//printf("v1 = %d v2 = %d\n",visit1[f1],visit2[f2]);

	if(visit1[f1] == all)
		printf("YES\n%d 1\n",f1+1);
	else if(visit2[f2] == all)
		printf("YES\n1 %d\n",f2+1);
	else if(visit1[f1] + visit2[f2] == all)
	{
		printf("YES\n%d %d\n",f1+1,f2+1);
	}
	else
	{
		printf("NO\n");
	}
return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [j]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [j])
				{
					maxY = count2 [j];
					y = i;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		//cout << "y > x\ny: " << y << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		//cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int max = 0, x, y1 = -1, y2 = -2;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count [j]++;
				if (max < count [j])
				{
					max = count [j];
					x = j;
				}
			}
		}
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (mat [i][j] == '*')
			{
				if (j == x)
					continue;
				else
				{
					if (y1 == -1)
						y1 = i;
					else
						y2 = i;
				}
			}
		}
	}
	if (y1 != y2 && y1 != -1 && y2 != -2)
		cout << "NO\n";
	else
	{
		if (y1 == -1)
			y1 = 0;
		cout << "YES\n" << y1 + 1 << " " << x + 1 << "\n";
	}

	return 0;
}


#include <iostream>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		//cout << "y: " << y << " " << x << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		//cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;

	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		cout << "y > x\ny: " << y << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		//cout << "y: " << y << " " << x << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		//cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;
	else
		ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	//cout << y << " " << x << "\n";
	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		cout << "y: " << y << " " << x << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;
	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int max = 0, x = -1, y1 = -1, y2 = -2;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count [j]++;
				if (max < count [j])
				{
					max = count [j];
					x = j;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (mat [i][j] == '*')
			{
				if (j == x)
					continue;
				else
				{
					if (y1 == -1)
						y1 = i;
					else
						y2 = i;
				}
			}
		}
	}

	if (y1 != y2 && y1 != -1 && y2 != -2)
		cout << "NO\n";
	else
	{
		if (y1 == -1)
			y1 = 0;
		cout << "YES\n" << y1 + 1 << " " << x + 1 << "\n";
	}

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	//cout << y << " " << x << "\n";
	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		cout << "y > x\ny: " << y << " " << x << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;
	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int max = 0, x, y1 = -1, y2 = -2;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count [j]++;
				if (max < count [j])
				{
					max = count [j];
					x = j;
				}
			}
		}
	}

	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			if (mat [i][j] == '*')
			{
				if (j == x)
					continue;
				else
				{
					if (y1 == -1)
						y1 = i;
					else
						y2 = i;
				}
			}
		}
	}
	if (y1 != y2 && y1 != -1)
		cout << "NO\n";
	else
	{
		if (y1 == -1)
			y1 = 0;
		cout << "YES\n" << y1 + 1 << " " << x + 1 << "\n";
	}

	return 0;
}


#include <iostream>
#include <vector>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (y > x)
	{
		cout << "y > x\ny: " << y << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;
	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	if (x == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (maxY > maxX)
	{
		cout << "y: " << y << " " << x << "\n";
		int x1 = -1, x2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						if (x1 == -1)
							x1 = j;
						else
							x2 = j;
					}
				}
			}
		}
		if (x1 != x2 && x1 != -1 && x2 != -2)
			ans = false;
		x = x1;
		//cout << "x: " << x << "\n";
	}

	else
	{
		int y1 = -1, y2 = -2;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						if (y1 == -1)
							y1 = i;
						else
							y2 = i;
					}
				}
			}
		}

		if (y1 != y2 && y1 != -1 && y2 != -2)
			ans = false;
		y = y1;
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;

	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";

	return 0;
}


#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

const int MAXN = 1000;

char mat [MAXN + 1][MAXN + 1];
int  count1 [MAXN + 1] = {0}, count2 [MAXN + 1] = {0};

int main ()
{
	int n, m;
	cin >> n >> m;

	int maxX = 0, maxY = 0, x = -1, y = -1;
	for (int i = 0; i < n; i++)
	{
		for (int j = 0; j < m; j++)
		{
			cin >> mat [i][j];
			if (mat [i][j] == '*')
			{
				count1 [j]++;
				count2 [i]++;
				if (maxX < count1 [j])
				{
					maxX = count1 [j];
					x = j;
				}
				if (maxY < count2 [i])
				{
					maxY = count2 [i];
					y = i;
				}
			}
		}
	}

	if (x == -1 || y == -1)
	{
		cout << "YES\n1 1\n";
		return 0;
	}

	bool ans = true;
	if (maxY > maxX)
	{
		//cout << "y: " << y << " " << x << "\n";
		//int x1 = -1, x2 = -2;
		vector <int> myX;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (i == y)
						continue;
					else
					{
						/*if (x1 == -1)
							x1 = j;
						else
							x2 = j;*/
						myX.push_back (j);
					}
				}
			}
		}

		sort (myX.begin (), myX.end ());
		if (!myX.empty () && myX [0] != myX [myX.size () - 1])
			ans = false;
		if (!myX.empty ())
			x = myX [0];
		else
			x = 0;
		/*if (x + 1 == 932 && y + 1 == 10)
		{
			cout << "x1: " << x1 << " x2: " << x2 << "\n";
		}*/
	}
	else
	{
		//int y1 = -1, y2 = -2;
		vector <int> myY;
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
				{
					if (j == x)
						continue;
					else
					{
						/*if (y1 == -1)
							y1 = i;
						else
							y2 = i;*/
							myY.push_back (i);
					}
				}
			}
		}

		sort (myY.begin (), myY.end ());
		if (!myY.empty () && myY [0] != myY [myY.size () - 1])
			ans = false;
		if (!myY.empty ())
			y = myY [0];
		else
			y = 0;
		/*if (x + 1 == 932 && y + 1 == 10)
		{
			cout << "y1: " << y1 << " y2: " << y2 << "\n";
		}*/
	}

	if (y == -1)
		y = 0;
	if (x == -1)
		x = 0;

	ans ? cout << "YES\n" << y + 1 << " " << x + 1 << "\n" : cout << "NO\n";
	/*if (y + 1 == 10 && x + 1 == 932)
	{
		for (int i = 0; i < n; i++)
		{
			for (int j = 0; j < m; j++)
			{
				if (mat [i][j] == '*')
					cout << "i: " << i << " j: " << j << "\n";
			}
		}
	}*/

	return 0;
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<"YES"<<endl;
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							x=row+1,y=j+1;
				    }
				maxi=var;
			}
		}
		max2=maxi;
		if(max2+max1-1!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{
	bool ex=false;
	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<"YES"<<endl;
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
			else if(maxi==var)
			{
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
				ex=false;
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							{
								if(arr[row][j]=='.')
									ex=true;
								x=row+1,y=j+1;
						    }
				    }
				maxi=var;
			}
		}
		max2=maxi;
		int sum=max2+max1;
		if(!ex)
			sum--;
		if(sum!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<1<<" "<<1<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							x=row+1,y=j+1;
				    }
				maxi=var;
			}
		}
		max2=maxi;
		if(max2+max1-1!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<n-1<<" "<<m-1<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							x=row+1,y=j+1;
				    }
				maxi=var;
			}
		}
		max2=maxi;
		if(max2+max1-1!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,ans,row[1000],col[1000];
char arr[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			cin>>arr[i][j];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
				ans+=(arr[i][j]=='*');
				row[i]+=(arr[i][j]=='*');
				col[j]+=(arr[i][j]=='*');

		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(row[i]+col[j]-(arr[i][j]=='*')==ans)
				{
					cout<<"YES"<<endl;
					cout<<i+1<<" "<<j+1<<endl;
					return 0;
				}

		}
	}
	cout<<"NO"<<endl;return 0;

}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							x=row+1,y=j+1;
				    }
				maxi=var;
			}
		}
		max2=maxi;
		if(max2+max1-1!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{
	bool ex=false;
	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<"YES"<<endl;
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
			else if(maxi==var)
			{
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{

				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							{
								if(arr[row][j]=='.')
									x=row+1,y=j+1;
						    }
				    }
				maxi=var;
			}
		}
		max2=maxi;
		int sum=max2+max1;
		if(sum<co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,ans,row[1000],col[1000];
char arr[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			cin>>arr[i][j];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(arr[i][j]=='*')
			{
				ans+=arr[i][j];
				row[i]+=arr[i][j];
				col[j]+=arr[i][j];
			}
		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<n;j++)
		{
			if(arr[i][j]=='*')
			{
				if(row[i]+col[j]-arr[i][j]==ans)
				{
					cout<<"YES"<<endl;
					cout<<i+1<<" "<<j+1<<endl;
					return 0;
				}
			}
			else
			{
				if(row[i]+col[j]==ans)
				{
					cout<<"YES"<<endl;
					cout<<i+1<<" "<<j+1<<endl;
					return 0;
				}
			}
		}
	}
	cout<<"NO"<<endl;return 0;

}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,ans,row[1000],col[1000];
char arr[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
			cin>>arr[i][j];
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
				ans+=(arr[i][j]=='*');
				row[i]+=(arr[i][j]=='*');
				col[j]+=(arr[i][j]=='*');

		}
	}
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(row[i]+col[j]-(arr[i][j]=='*')==ans)
				{
					cout<<"YES"<<endl;
					cout<<i+1<<" "<<j+1<<endl;
					return 0;
				}

		}
	}
	cout<<"NO"<<endl;return 0;

}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{

	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							x=row+1,y=j+1;
				    }
				maxi=var;
			}
		}
		max2=maxi;
		if(max2+max1-1!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{
	bool ex=false;
	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<"YES"<<endl;
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
			else if(maxi==var)
			{
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{

				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							{

				x=row+1,y=j+1;
						    }
				    }
				maxi=var;
			}
		}
		max2=maxi;
		int sum=max2+max1;
		if(sum<co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{
	bool ex=false;
	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<"YES"<<endl;
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
			else if(maxi==var)
			{
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<=var)
			{
			ex=false;
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							{
								if(arr[row][j]=='.')
									ex=true;
				               x=row+1,y=j+1;
						    }
				    }
				maxi=var;
			}
		}
		max2=maxi;
		int sum=max2+max1;
		if(!ex)
			sum--;
		if(sum!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<set>
#include<map>
#include<list>
#include<iomanip>
#include<cmath>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<complex>
#include<sstream>
#include<iostream>
#include<fstream>
#include<algorithm>
#include<numeric>
#include<utility>
#include<functional>
#include<stdio.h>
#include<assert.h>
#include<memory.h>
#include<bitset>
using namespace std;
int n,m,r=0,co=0,maxi=0,var=0,col=0,row=0,max1,max2,x,y;
char arr[1000][1000];
int a[1000][1000];
int main()
{
	bool ex=false;
	std::ios_base::sync_with_stdio(false);
	cin>>n>>m;
	for(int i=0;i<n;i++)
		for(int j=0;j<m;j++)
		{
			cin>>arr[i][j];
			if(arr[i][j]=='*')
				co++;
		}
		if(co==0)
			{
				cout<<"YES"<<endl;
				cout<<n<<" "<<m<<endl;
				return 0;
		}
		if(co>(n+m-1))
		{
			cout<<"NO"<<endl;
			return 0;
		}
		for(int i=0;i<m;i++)
		{
		    var=0;
			for(int j=0;j<n;j++)
			{
				if(arr[j][i]=='*')
					var++;
			}
			if(maxi<var)
			{
				for(int j=0;j<n;j++)
					a[j][row]=0;
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
			else if(maxi==var)
			{
				row=i;
				for(int j=0;j<n;j++)
					a[j][row]=1;
				maxi=var;
			}
		}
		max1=maxi;
		maxi=0;row=0,var=0;
		for(int i=0;i<n;i++)
		{
		    var=0;
			for(int j=0;j<m;j++)
			{
				if(arr[i][j]=='*')
					var++;
		   }
			if(maxi<var)
			{
				ex=false;
				row=i;
				for(int j=0;j<m;j++)
					{
						if(a[row][j]==1)
							{
								if(arr[row][j]=='.')
									ex=true;
				               x=row+1,y=j+1;
						    }
				    }
				maxi=var;
			}
		}
		max2=maxi;
		int sum=max2+max1;
		if(!ex)
			sum--;
		if(sum!=co)
			cout<<"NO"<<endl;
		else
		{
			cout<<"YES"<<endl;
			cout<<x<<" "<<y<<endl;
		}
}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
bool check(int x, int y) {
	int ss = 0;
	if (mmp[x][y] == '*') ss++;
	for (int i = x + 1; i < n; i++) {
		if (mmp[i][y] == '*')ss++;
	}
	for (int i = 0; i < x; i++) {
		if (mmp[i][y] == '*') ss++;
	}
	for (int j = 0; j < y; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	for (int j = y+1; j < m; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	//printf("%d %d\n", ss, s);
	if (ss == s) return true;
	else return false;
}
int main() {

	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') s++;
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			//if (mmp[i][j] == '*') {
				if (check(i, j)) {
					printf("YES\n%d %d\n", i + 1, j + 1); return 0;
				}
			//}
		}
	}
	printf("NO\n"); return 0;

}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
bool check(int x, int y) {
	int ss = 1;
	for (int i = x + 1; i < n; i++) {
		if (mmp[i][y] == '*')ss++;
	}
	for (int i = 0; i < x; i++) {
		if (mmp[i][y] == '*') ss++;
	}
	for (int j = 0; j < y; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	for (int j = y+1; j < m; j++) {
		if (mmp[x][j] == '*') ss++;
	}

	if (ss == s) return true;
	else return false;
}
int main() {

	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') s++;
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < n; j++) {
			if (mmp[i][j] == '*') {
				if (check(i, j)) {
					printf("YES\n%d %d\n", i + 1, j + 1); return 0;
				}
			}
		}
	}
	printf("NO\n"); return 0;

}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
int x[1005];
int y[1005];

int main() {

	int xx = 0; int yy = 0;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') {
				x[i + 1]++;
				y[j + 1]++;
				xx = i + 1;
				yy = j + 1;
				s++;
			}
		}
	}
	int cntx = 0; int cnty = 0;
	for (int i = 1; i <= n; i++) {
		if (x[i] >= 2) {
			xx = i;
			cntx = x[i];
			break;
		}
	}
	for (int i = 1; i <= m; i++) {
		if (y[i] >= 2) {
			yy = i;
			cnty = y[i];
			break;
		}
	}

	if (cntx + cnty == s + 1 || ((cntx == 0 || cnty == 0) && cntx + cnty == s)) {
		printf("YES\n%d %d\n", xx, yy);
	}
	else printf("NO\n");
}


// test.cpp: 定义控制台应用程序的入口点。

#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
int x[1005];
int y[1005];

int main() {

	int xx = 1; int yy = 1;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') {
				x[i + 1]++;
				y[j + 1]++;
				xx = i + 1;
				yy = j + 1;
				s++;
			}
		}
	}
	int cntx = 0; int cnty = 0;
	for (int i = 1; i <= n; i++) {
		if (x[i] >= 2) {
			xx = i;
			cntx = x[i];
			break;
		}
	}
	for (int i = 1; i <= m; i++) {
		if (y[i] >= 2) {
			yy = i;
			cnty = y[i];
			break;
		}
	}
	if (s == 1) {
		printf("YES\n%d %d\n", xx, yy);
	}
	else {
		if (cntx + cnty == s + 1 || ((cntx == 0 || cnty == 0) && cntx + cnty == s)) {
			printf("YES\n%d %d\n", xx, yy);
		}
		else printf("NO\n");
	}
}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
bool check(int x, int y) {
	int ss = 1;
	for (int i = x + 1; i < n; i++) {
		if (mmp[i][y] == '*')ss++;
	}
	for (int i = 0; i < x; i++) {
		if (mmp[i][y] == '*') ss++;
	}
	for (int j = 0; j < y; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	for (int j = y+1; j < m; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	//printf("%d %d\n", ss, s);
	if (ss == s) return true;
	else return false;
}
int main() {

	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') s++;
		}
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (mmp[i][j] == '*') {
				if (check(i, j)) {
					printf("YES\n%d %d\n", i + 1, j + 1); return 0;
				}
			}
		}
	}
	printf("NO\n"); return 0;

}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
int x[1005];
int y[1005];

int main() {

	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') {
				x[i]++;
				y[j]++;
				s++;
			}
		}
	}
	//for (int i = 1; i <= n; i++) printf("%d ", x[i]);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if ( (x[i] + y[j] == s + 1) && (mmp[i][j] == '*')) {
				printf("YES\n%d %d\n", i, j);
				return 0;
			}
			if (x[i] + y[j] == s && mmp[i][j] != '*') {
				printf("YES\n%d %d\n", i, j);
				return 0;
			}
		}
	}
	printf("NO\n");
}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
int x[1005];
int y[1005];

int main() {

	int xx = 1; int yy = 1;
	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') {
				x[i + 1]++;
				y[j + 1]++;
				xx = i + 1;
				yy = j + 1;
				s++;
			}
		}
	}
	int cntx = 0; int cnty = 0;
	for (int i = 1; i <= n; i++) {
		if (x[i] >= 2) {
			xx = i;
			cntx = x[i];
			break;
		}
	}
	for (int i = 1; i <= m; i++) {
		if (y[i] >= 2) {
			yy = i;
			cnty = y[i];
			break;
		}
	}

	if (cntx + cnty == s + 1 || ((cntx == 0 || cnty == 0) && cntx + cnty == s) || (cntx == 0 && cnty == 0)) {
		printf("YES\n%d %d\n", xx, yy);
	}
	else printf("NO\n");
}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
#include<set>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
int x[1005];
int y[1005];

int main() {

	scanf("%d %d", &n, &m);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') {
				x[i]++;
				y[j]++;
				s++;
			}
		}
	}
	//for (int i = 1; i <= n; i++) printf("%d ", x[i]);
	for (int i = 1; i <= n; i++) {
		for (int j = 1; j <= m; j++) {
			if ( (x[i] + y[j] == s + 1) && (mmp[i][j] == '*')) {
				printf("YES\n%d %d\n", i, j);
				return 0;
			}
			if (x[i] + y[i] == s && mmp[i][j] != '*') {
				printf("YES\n%d %d\n", i, j);
				return 0;
			}
		}
	}
	printf("NO\n");
}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
bool check(int x, int y) {
	int ss = 1;
	for (int i = x + 1; i < n; i++) {
		if (mmp[i][y] == '*')ss++;
	}
	for (int i = 0; i < x; i++) {
		if (mmp[i][y] == '*') ss++;
	}
	for (int j = 0; j < y; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	for (int j = y+1; j < m; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	//printf("%d %d\n", ss, s);
	if (ss == s) return true;
	else return false;
}
int main() {

	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') s++;
		}
	}
	if (s == 0) {
		printf("YES\n1 1\n"); return 0;
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (mmp[i][j] == '*') {
				if (check(i, j)) {
					printf("YES\n%d %d\n", i + 1, j + 1); return 0;
				}
			}
		}
	}
	printf("NO\n"); return 0;

}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
bool check(int x, int y) {
	int ss = 1;
	for (int i = x + 1; i < n; i++) {
		if (mmp[i][y] == '*')ss++;
	}
	for (int i = 0; i < x; i++) {
		if (mmp[i][y] == '*') ss++;
	}
	for (int j = 0; j < y; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	for (int j = y+1; j < m; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	//printf("%d %d\n", ss, s);
	if (ss == s) return true;
	else return false;
}
int main() {

	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') s++;
		}
	}

	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			//if (mmp[i][j] == '*') {
				if (check(i, j)) {
					printf("YES\n%d %d\n", i + 1, j + 1); return 0;
				}
			//}
		}
	}
	printf("NO\n"); return 0;

}


#include<iostream>
#include<cstdio>
#include<string>
#include<cstring>
#include<algorithm>
using namespace std;
const int N = 200005;
const int INF = 1000000000;
char mmp[1005][1005];
int n, m, s;
bool check(int x, int y) {
	int ss = 1;
	for (int i = x + 1; i < n; i++) {
		if (mmp[i][y] == '*')ss++;
	}
	for (int i = 0; i < x; i++) {
		if (mmp[i][y] == '*') ss++;
	}
	for (int j = 0; j < y; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	for (int j = y+1; j < m; j++) {
		if (mmp[x][j] == '*') ss++;
	}
	//printf("%d %d\n", ss, s);
	if (ss == s) return true;
	else return false;
}
int main() {

	scanf("%d %d", &n, &m);
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			scanf(" %c", &mmp[i][j]);
			if (mmp[i][j] == '*') s++;
		}
	}
	if (s == 0) {
		printf("YES\n1 1\n");
	}
	for (int i = 0; i < n; i++) {
		for (int j = 0; j < m; j++) {
			if (mmp[i][j] == '*') {
				if (check(i, j)) {
					printf("YES\n%d %d\n", i + 1, j + 1); return 0;
				}
			}
		}
	}
	printf("NO\n"); return 0;

}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <unordered_set>

using namespace std;
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
template<class T> inline T sqr(T x) {return x*x;}
typedef vector<long > VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef pair<long , long > PII;
#define ALL(a)  (a).begin(),(a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define MP make_pair
#define SZ(a) long ((a).size())
#define EACH(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); ++i)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
#define FOR(i,a,b) for(long  i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
const double EPS = 1e-10;
const double PI  = acos(-1.0);
#define CLR(a) memset((a), 0 ,sizeof(a))
#define dump(x)  cerr << #x << " = " << (x) << endl
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;
long  pw(long  x, long  y){long  ans = 1;for(long  i = 0; i < y; i++){ans = ans * x;}return ans;}
long  factorial(long  x){long  ans = 1; for(int i = 1 ;i < x+1; i++){ans = ans *i;}return ans;}
long  combination(long  x,long  y){return factorial(x)/factorial(y)/factorial(x-y);}
long  permutation(long  x, long  y){return factorial(x)/factorial(x-y);}
//コンテナ用のdump xdumpを定義する
template<class X> void xdump(list<X> &l){typename list<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the list" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;}}
template<class X> void xdump(vector<X> &l){typename vector<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the vector" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;	}}
template<class X> void xdump(queue<X> &l){typename queue<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the queue" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;}}
template<class X> void xdump(stack<X> &l){  typename stack<X>::iterator itr = l.begin();  int cnt = 0;  cerr << "dumping the stack" << endl;  while(1){   if(itr == l.end()) break;   cerr << cnt << ":" << (*itr) << endl;   itr++;   cnt++;    }   }
template<class X,class Y> void xdump(vector<pair<X,Y> > v){  typename vector<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the vector with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(list<pair<X,Y> > v){  typename list<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the list with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(queue<pair<X,Y> > v){  typename queue<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the queue with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(stack<pair<X,Y> > v){  typename stack<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the stack with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(map<X,Y> m){ typename map<X,Y> :: iterator itr = m.begin(); int cnt = 0; cerr << "dumping the map" << endl; while(1){ if(itr == m.end()) break; cerr << cnt << ":" << (*itr).first << "/" << (*itr).second << endl; cnt++; itr++;  } }
int flip(int x){string s;s = toString(x);string s2;for(int i = 0; i < s.size(); i++){s2 = toString(s[i]) + s2;}return toInt(s2);}
string flip(string s){string ss;for(int i = 0; i < s.size(); i++){ss = toString(s[i]) + ss;}return ss;}
#define TimeCount1    auto chrono_start = std::chrono::system_clock::now();
#define TimeCount2   auto chrono_end = std::chrono::system_clock::now();std::cout << "Elapsed time(C++):" << std::chrono::duration_cast<std::chrono::milliseconds>(chrono_end - chrono_start).count() << "[ms]" << std::endl;
//#define long  long  long
long  mod(long  a, long  b){
	if(a%b==0){return 0;}else{
		return a%b;
	}
}
#define long long long
#define LLMAX 9223372036854775807

/*
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
long  gcm(long  x, long  y){long  i = x;long  k = y;while(1){if(i == 0){return k;}if(k == 0){return i;}if(i > k){i = i % k;}else{k = k % i;}}}
*/
int main(){
	int n, m;
	cin >> n >> m;
	vector<string> s(n);
	for(int i = 0; i < n; i ++){
		cin >> s[i];
	}
	int flag = 0;
	int flag2 = 0;
	int temp = 0;
	int temp2 = 0;
	int temp3 = -1;
	int ans1, ans2;
	for(int i = 0; i< n; i++){
		flag = 0;
		for(int k = 0; k < m; k++){
			if(s[i][k] == '*'){
				flag = flag + 1;
				temp = k;
			}
		}
		if(flag >= 2){
			if(temp2 == 1){
				cout << "NO" << endl;
				return 0;
			}else{
				temp2 = 1;
				ans1 = i + 1;

			}
		}else{
			if(temp3 == -1){
				temp3 = temp;
				ans2 = temp;
			}else{
				if(temp3 != temp){
					cout << "NO" << endl;
					return 0;
				}
			}
		}

	}
	cout << "YES" << endl;
	if(ans1 == -1){ans1 = 1;}
	cout << ans1 << " " << ans2 + 1 << endl;
	return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <unordered_set>

using namespace std;
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
template<class T> inline T sqr(T x) {return x*x;}
typedef vector<long > VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef pair<long , long > PII;
#define ALL(a)  (a).begin(),(a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define MP make_pair
#define SZ(a) long ((a).size())
#define EACH(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); ++i)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
#define FOR(i,a,b) for(long  i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
const double EPS = 1e-10;
const double PI  = acos(-1.0);
#define CLR(a) memset((a), 0 ,sizeof(a))
#define dump(x)  cerr << #x << " = " << (x) << endl
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;
long  pw(long  x, long  y){long  ans = 1;for(long  i = 0; i < y; i++){ans = ans * x;}return ans;}
long  factorial(long  x){long  ans = 1; for(int i = 1 ;i < x+1; i++){ans = ans *i;}return ans;}
long  combination(long  x,long  y){return factorial(x)/factorial(y)/factorial(x-y);}
long  permutation(long  x, long  y){return factorial(x)/factorial(x-y);}
//コンテナ用のdump xdumpを定義する
template<class X> void xdump(list<X> &l){typename list<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the list" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;}}
template<class X> void xdump(vector<X> &l){typename vector<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the vector" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;	}}
template<class X> void xdump(queue<X> &l){typename queue<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the queue" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;}}
template<class X> void xdump(stack<X> &l){  typename stack<X>::iterator itr = l.begin();  int cnt = 0;  cerr << "dumping the stack" << endl;  while(1){   if(itr == l.end()) break;   cerr << cnt << ":" << (*itr) << endl;   itr++;   cnt++;    }   }
template<class X,class Y> void xdump(vector<pair<X,Y> > v){  typename vector<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the vector with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(list<pair<X,Y> > v){  typename list<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the list with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(queue<pair<X,Y> > v){  typename queue<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the queue with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(stack<pair<X,Y> > v){  typename stack<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the stack with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(map<X,Y> m){ typename map<X,Y> :: iterator itr = m.begin(); int cnt = 0; cerr << "dumping the map" << endl; while(1){ if(itr == m.end()) break; cerr << cnt << ":" << (*itr).first << "/" << (*itr).second << endl; cnt++; itr++;  } }
int flip(int x){string s;s = toString(x);string s2;for(int i = 0; i < s.size(); i++){s2 = toString(s[i]) + s2;}return toInt(s2);}
string flip(string s){string ss;for(int i = 0; i < s.size(); i++){ss = toString(s[i]) + ss;}return ss;}
#define TimeCount1    auto chrono_start = std::chrono::system_clock::now();
#define TimeCount2   auto chrono_end = std::chrono::system_clock::now();std::cout << "Elapsed time(C++):" << std::chrono::duration_cast<std::chrono::milliseconds>(chrono_end - chrono_start).count() << "[ms]" << std::endl;
//#define long  long  long
long  mod(long  a, long  b){
	if(a%b==0){return 0;}else{
		return a%b;
	}
}
#define long long long
#define LLMAX 9223372036854775807

/*
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
long  gcm(long  x, long  y){long  i = x;long  k = y;while(1){if(i == 0){return k;}if(k == 0){return i;}if(i > k){i = i % k;}else{k = k % i;}}}
*/
int main(){
	int n, m;
	cin >> n >> m;
	vector<string> s(n);
	for(int i = 0; i < n; i ++){
		cin >> s[i];
	}
	int flag = 0;
	int flag2 = 0;
	int temp = 0;
	int temp2 = 0;
	int temp3 = -1;

	int ans1 = -1;
	int ans2;
	for(int i = 0; i< n; i++){
		flag = 0;
		for(int k = 0; k < m; k++){
			if(s[i][k] == '*'){
				flag = flag + 1;
				temp = k;
			}
		}
		if(flag >= 2){
			if(temp2 == 1){
				cout << "NO" << endl;
				return 0;
			}else{
				temp2 = 1;
				ans1 = i + 1;

			}
		}else if(flag != 0){
			if(temp3 == -1){
				temp3 = temp;
				ans2 = temp;
			}else{
				if(temp3 != temp){
					cout << "NO" << endl;
					return 0;
				}
			}
		}

	}
	cout << "YES" << endl;
	if(ans1 == -1){ans1 = 1;}
	cout << ans1 << " " << ans2 + 1 << endl;
	return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <unordered_set>

using namespace std;
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
template<class T> inline T sqr(T x) {return x*x;}
typedef vector<long > VI;
typedef vector<VI> VVI;
typedef vector<string> VS;
typedef pair<long , long > PII;
#define ALL(a)  (a).begin(),(a).end()
#define RALL(a) (a).rbegin(), (a).rend()
#define PB push_back
#define MP make_pair
#define SZ(a) long ((a).size())
#define EACH(i,c) for(typeof((c).begin()) i=(c).begin(); i!=(c).end(); ++i)
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
#define FOR(i,a,b) for(long  i=(a);i<(b);++i)
#define REP(i,n)  FOR(i,0,n)
const double EPS = 1e-10;
const double PI  = acos(-1.0);
#define CLR(a) memset((a), 0 ,sizeof(a))
#define dump(x)  cerr << #x << " = " << (x) << endl
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;
long  pw(long  x, long  y){long  ans = 1;for(long  i = 0; i < y; i++){ans = ans * x;}return ans;}
long  factorial(long  x){long  ans = 1; for(int i = 1 ;i < x+1; i++){ans = ans *i;}return ans;}
long  combination(long  x,long  y){return factorial(x)/factorial(y)/factorial(x-y);}
long  permutation(long  x, long  y){return factorial(x)/factorial(x-y);}
//コンテナ用のdump xdumpを定義する
template<class X> void xdump(list<X> &l){typename list<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the list" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;}}
template<class X> void xdump(vector<X> &l){typename vector<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the vector" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;	}}
template<class X> void xdump(queue<X> &l){typename queue<X>::iterator itr = l.begin();int cnt = 0;cerr << "dumping the queue" << endl;while(1){if(itr == l.end()) break;cerr << cnt << ":" << (*itr) << endl;itr++;cnt++;}}
template<class X> void xdump(stack<X> &l){  typename stack<X>::iterator itr = l.begin();  int cnt = 0;  cerr << "dumping the stack" << endl;  while(1){   if(itr == l.end()) break;   cerr << cnt << ":" << (*itr) << endl;   itr++;   cnt++;    }   }
template<class X,class Y> void xdump(vector<pair<X,Y> > v){  typename vector<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the vector with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(list<pair<X,Y> > v){  typename list<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the list with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(queue<pair<X,Y> > v){  typename queue<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the queue with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(stack<pair<X,Y> > v){  typename stack<pair<X,Y> >::iterator itr = v.begin();  int cnt = 0;  cerr << " dumping the stack with pair" << endl;  while(1){   if(itr == v.end()) break;   cerr << cnt << ":" << (*itr).first << " " << (*itr).second << endl;   itr++;   cnt++;  }   }
template<class X,class Y> void xdump(map<X,Y> m){ typename map<X,Y> :: iterator itr = m.begin(); int cnt = 0; cerr << "dumping the map" << endl; while(1){ if(itr == m.end()) break; cerr << cnt << ":" << (*itr).first << "/" << (*itr).second << endl; cnt++; itr++;  } }
int flip(int x){string s;s = toString(x);string s2;for(int i = 0; i < s.size(); i++){s2 = toString(s[i]) + s2;}return toInt(s2);}
string flip(string s){string ss;for(int i = 0; i < s.size(); i++){ss = toString(s[i]) + ss;}return ss;}
#define TimeCount1    auto chrono_start = std::chrono::system_clock::now();
#define TimeCount2   auto chrono_end = std::chrono::system_clock::now();std::cout << "Elapsed time(C++):" << std::chrono::duration_cast<std::chrono::milliseconds>(chrono_end - chrono_start).count() << "[ms]" << std::endl;
//#define long  long  long
long  mod(long  a, long  b){
	if(a%b==0){return 0;}else{
		return a%b;
	}
}
#define long long long
#define LLMAX 9223372036854775807

/*
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
long  gcm(long  x, long  y){long  i = x;long  k = y;while(1){if(i == 0){return k;}if(k == 0){return i;}if(i > k){i = i % k;}else{k = k % i;}}}
*/
int main(){
	int n, m;
	cin >> n >> m;
	vector<string> s(n);
	for(int i = 0; i < n; i ++){
		cin >> s[i];
	}
	int flag = 0;
	int flag2 = 0;
	int temp = 0;
	int temp2 = 0;
	int temp3 = -1;

	int ans1 = -1;
	int ans2;
	for(int i = 0; i< n; i++){
		flag = 0;
		for(int k = 0; k < m; k++){
			if(s[i][k] == '*'){
				flag = flag + 1;
				temp = k;
			}
		}
		if(flag >= 2){
			if(temp2 == 1){
				cout << "NO" << endl;
				return 0;
			}else{
				temp2 = 1;
				ans1 = i + 1;

			}
		}else{
			if(temp3 == -1){
				temp3 = temp;
				ans2 = temp;
			}else{
				if(temp3 != temp){
					cout << "NO" << endl;
					return 0;
				}
			}
		}

	}
	cout << "YES" << endl;
	if(ans1 == -1){ans1 = 1;}
	cout << ans1 << " " << ans2 + 1 << endl;
	return 0;
}


#include <vector>
#include <list>
#include <map>
#include <set>
#include <deque>
#include <queue>
#include <stack>
#include <bitset>
#include <algorithm>
#include <functional>
#include <numeric>
#include <utility>
#include <sstream>
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <cmath>
#include <cstdlib>
#include <cctype>
#include <string>
#include <unordered_set>
using namespace std;
inline long  toInt(string s) {long  v; istringstream sin(s);sin>>v;return v;}
template<class T> inline string toString(T x) {ostringstream sout;sout<<x;return sout.str();}
template<class T> inline T sqr(T x) {return x*x;}
#define EXIST(s,e) ((s).find(e)!=(s).end())
#define SORT(c) sort((c).begin(),(c).end())
#define dump(x)  cerr << #x << " = " << (x) << endl
#define debug(x) cerr << #x << " = " << (x) << " (L" << __LINE__ << ")" << " " << __FILE__ << endl;
#define long long long
long  pw(long  x, long  y){long  ans = 1;for(long  i = 0; i < y; i++){ans = ans * x;}return ans;}
long  factorial(long  x){long  ans = 1; for(int i = 1 ;i < x+1; i++){ans = ans *i;}return ans;}
long  combination(long  x,long  y){return factorial(x)/factorial(y)/factorial(x-y);}
long  permutation(long  x, long  y){return factorial(x)/factorial(x-y);}
#define TimeCount1    auto chrono_start = std::chrono::system_clock::now();
#define TimeCount2   auto chrono_end = std::chrono::system_clock::now();std::cout << "Elapsed time(C++):" << std::chrono::duration_cast<std::chrono::milliseconds>(chrono_end - chrono_start).count() << "[ms]" << std::endl;

#define len 8

 //#include "./printer.hpp"

int main(){

	int n,m;
	cin >> n >> m;

	vector<int> temp(m,0);
	vector<vector<int>> v(n,temp);

	vector<int> vsum(m, 0);
	vector<int> hsum(n, 0);
	list<pair<int,int>> l;

	for(int i = 0; i < n; i++){
		for(int k = 0; k < m; k++){
			char c;
			cin>> c;
			if(c == '*'){
				v[i][k] = 1;
				vsum[k]++;
				hsum[i]++;
				l.push_back({i,k});
			}
		}
	}

	int flag = 0;
	int hor;
	for(int i = 0; i < n; i++){
		if(hsum[i] > 1){
			if(flag == 1){
				cout << "NO" << endl;
				return 0;
			}
			flag = 1;
			hor = i;

		}
	}

	int flag2 = 0;
	int ver;
	for(int i = 0; i < m; i++){
		if(vsum[i] > 1){
			if(flag2 == 1){
				cout << "NO" << endl;
				return 0;
			}
			flag2 = 1;
			ver = i;
		}

	}

	if(flag == 0 && flag2 == 0){
		int sum = 0;
		for(auto i : vsum){
			sum+= i;
		}
		if(sum == 0){
			cout << "YES" << endl;
			cout   << 1 <<' ' << 1 << endl;
			return 0;
		}else if(sum == 1){
			cout << "YES" << endl;
			cout << l.front().first + 1 << ' ' << l.front().second + 1 << endl;
			return 0;

		}else if(sum == 2){
			cout << "YES" << endl;
			cout << l.front().first + 1 << ' ' << l.back().second + 1 << endl;
			return 0;
		}else{
			cout << "NO" << endl;
			return 0;
		}
	}else if(flag == 0 && flag2  == 1){
		int flag3 = -1;
		for(int i = 0; i < n; i++){
			if(hsum[i] - v[i][ver] > 0){
				if(flag3 != -1){
					cout << "NO" << endl;
					return 0;
				}
				flag3 = i;

			}
		}
		if(flag3 == -1){
			flag3 = 0;
		}
		cout << "YES" << endl;
		cout << flag3 + 1 << ' ' << ver+ 1 << endl;
		return 0;
	}else if(flag == 1 && flag2  == 0){

		int flag3 = -1;
		for(int i = 0; i < m; i++){
			if(vsum[i] - v[hor][i] > 0){
				if(flag3 != -1){
					cout << "NO" << endl;
					return 0;
				}
				flag3 = i;
			}
		}
		if(flag3 == -1){
			flag3++;
		}
		cout << "YES" << endl;
		cout << hor  + 1 << ' ' << flag3 + 1 << endl;
		return 0;
	}else{
		for(auto i : l){
			if(i.first != hor || i.second != ver){
				cout << "NO" << endl;
				return 0;
			}
		}
		cout << "YES" << endl;
		cout << hor + 1 << ' ' << ver + 1 << endl;
		return 0;
	}

}
//corner case, printer, dump