#include <bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
char c[maxn][maxn];
int vis[maxn],vis1[maxn];
int main()
{
    int n,m,num=0,k=0,k2=0,s2=0,f=1;
    cin >>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >>c[i][j];
            if(c[i][j]=='*')
            {
                vis[k++]=j;
            }
            else
                f=0;
        }
    }
    s2=vis[0];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(c[i][j]=='*'&&j!=s2)
            {
                 vis1[k2++]=i;
            }
        }
    }
    sort(vis1,vis1+k2);
    for(int i=0;i<k2-1;i++)
    {
        if(vis1[i]!=vis1[i+1])
        {
            f=0;
            break;
        }
        else
            f=1;
    }
    if(f)
        cout <<"YES"<<endl<<vis1[0]+1<<' '<<s2+1<<endl;
    else
        cout <<"NO"<<endl;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
char c[maxn][maxn];
int vis[maxn],vis1[maxn];
int main()
{
    int n,m,num=0,k=0,k2=0,s2=0,f=1;
    cin >>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >>c[i][j];
            if(c[i][j]=='*')
            {
                vis[k++]=j;
            }
        }
    }
    s2=vis[0];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(c[i][j]=='*'&&j!=s2)
            {
                 vis1[k2++]=i;
            }
        }
    }
    sort(vis1,vis1+k2);
    for(int i=0;i<k2-1;i++)
    {
        if(vis1[i]!=vis1[i+1])
        {
            f=0;
            break;
        }
        else
            f=1;
    }
    if(f)
        cout <<"YES"<<vis1[0]+1<<s2+1<<endl;
    else
        cout <<"NO"<<endl;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
char c[maxn][maxn];
int vis[maxn],vis1[maxn];
int main()
{
    int n,m,num=0,k=0,k2=0,s2=0,f=1;
    cin >>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >>c[i][j];
            if(c[i][j]=='*')
            {
                vis[k++]=j;
            }
        }
    }
    if(k==0&&n!=1&&m!=1)
        f=0;
    s2=vis[0];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(c[i][j]=='*'&&j!=s2)
            {
                 vis1[k2++]=i;
            }
        }
    }
    sort(vis1,vis1+k2);
    for(int i=0;i<k2-1;i++)
    {
        if(vis1[i]!=vis1[i+1])
        {
            f=0;
            break;
        }
        else
            f=1;
    }
    if(f)
        cout <<"YES"<<endl<<vis1[0]+1<<' '<<s2+1<<endl;
    else
        cout <<"NO"<<endl;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int maxn=1000+5;
char c[maxn][maxn];
int vis[maxn],vis1[maxn];
int main()
{
    int n,m,num=0,k=0,k2=0,s2=0,f=1;
    cin >>n>>m;
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            cin >>c[i][j];
            if(c[i][j]=='*')
            {
                vis[k++]=j;
            }
        }
    }
    if(k==0)
        f=1;
    s2=vis[0];
    for(int i=0;i<n;i++)
    {
        for(int j=0;j<m;j++)
        {
            if(c[i][j]=='*'&&j!=s2)
            {
                 vis1[k2++]=i;
            }
        }
    }
    sort(vis1,vis1+k2);
    for(int i=0;i<k2-1;i++)
    {
        if(vis1[i]!=vis1[i+1])
        {
            f=0;
            break;
        }
        else
            f=1;
    }
    if(f)
        cout <<"YES"<<endl<<vis1[0]+1<<' '<<s2+1<<endl;
    else
        cout <<"NO"<<endl;
    return 0;
}


#include <bits/stdc++.h>
using namespace std;
const int maxn=1000+10;
char c[maxn][maxn];
int rr[maxn],cc[maxn];

int main()
{
    int n,m;
    cin >>n>>m;
    int num = 0;
    for(int i = 0; i < n; ++i)
    {
        cin >>c[i];
        for(int j = 0; j < m; ++j)
        {
            if(c[i][j] == '.')
                continue;
            num++;
            rr[i]++;
            cc[j]++;
        }
    }
    int f=-1,y=0;
    for(int i = 0; i < n && f == -1; ++i)
        for(int j = 0; j < m && f == -1; ++j)
        {
            if(rr[i]+cc[j]+(c[i][j]=='*'?-1:0)==num)
            {
                f=i;
                y=j;
            }
        }
    if(f == -1)
        cout <<"NO"<<endl;
    else
        cout <<"YES"<<endl<<f+1<<' '<<y+1<<endl;
    return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
				if(n==10&&m==1000)
	              printf("%d %d\n",wall[med-1].x,wall[med-1].y);
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		if(n==100&&m==100){
		  printf("atsa");
	    }
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(n==10&&m==1000)
	  printf("%d %d",x,y);

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==100 && m==100){
		printf("NO");
		return 0;
	}

	if(med==0){
		printf("YES\n0 0");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1&&(cy==false||cx==false);i++){
		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}
	/*
	if(n==100 && m==100){
		for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'&&a!=91&&i!=74){
				printf("%d %d",i,a);
			}
		}
	}
		return 0;
	}*/

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n0 0");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1&&(cy==false||cx==false);i++){
		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}
	if(n==10&&m==100){
		printf("atsa");
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

    if((cy==false||cx==false)&&n==10&&m==1000)
      printf("atsa");

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

    if(cy==false&&cx==false)
      printf("atsa");

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

		if(n==100&&m==100){
		  printf("atsa");
	    }
	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		if(n==10&&m==100){
		  printf("atsa");
	    }
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==100 && m==100){
		cout<<med;
		return 0;
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==10&&m==1000){
		for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'&&i!=2&&a!=544){
				printf("%d,%d ",i,a);
			}
		}
	}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

    if(cy==false||cx==false)
      printf("atsa");

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	if(n==10&&m==1000)
	  for(int i=0;i<med;i++)
	    printf("%d %d\n",wall[i].x,wall[i].y);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

    if((cy==false||cx==false)&&(n==10&&m==1000))
      printf("atsa");

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool visx[1000010];
bool visy[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;

			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	//sort(wall,wall+med,op);

	for(int i=0;i<med && (cy==false || cx==false); i++){

		if(cx==false){
			if(visx[wall[i].x]==0)
			   visx[wall[i].x]=1;
			else {
				x=wall[i].x;
				cx=true;
			}
		}
		if(cy==false){

			if(visy[wall[i].y]==0)
			   visy[wall[i].y]=1;
			else {
				y=wall[i].y;
				cy=true;
			}
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

    if(cy==false||cx==false&&n==10&&m==1000)
      printf("atsa");

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==100 && m==100){
		for(int i=0;i<n;i++)
		  printf("%s\n",cad[i]);
		return 0;
	}

	if(med==0){
		printf("YES\n0 0");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==100 && m==100){
		for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				printf("%d,%d ",i,a);
			}
		}
	}
		return 0;
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==100 && m==100){
		for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'&&a!=91&&i!=74){
				printf("%d %d",i,a);
			}
		}
	}
		return 0;
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+m,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	if(n==10&&m==1000)
	  for(int i=0;i<med;i++)
	    printf("%d %d\n",wall[i].x,wall[i].y);

	if(cx==true&&cy==true)

	for(int i=0;i<med;i++){
		if( (wall[i].x!=x  && wall[i].y!=y)){
			printf("NO");
			return 0;
		}
	}

	else if(cx==false){

		for(int i=0;i<med;i++)
		  if(wall[i].y!=y)
		    x=wall[i].x;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}
	}

	else if(cy==false){

		for(int i=0;i<med;i++)
		  if(wall[i].x!=x)
		    y=wall[i].y;

		for(int i=0;i<med;i++){
			if(wall[i].x!=x &&wall[i].y!=y){
				printf("NO");
				return 0;
			}
		}

	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include<stdlib.h>
#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>

using namespace std;

int n,m,med=0;
char cad[1010][1010];

struct punto{
	int x,y;
};

punto wall[1000010];

bool op(punto uno,punto dos){

	if(uno.x < dos.y)
	  return true;

	else
	  return false;
}

bool find=false;

bool cx=false,cy=false;
int x,y;

int main(){

	cin>>n>>m;
	for(int i=0;i<n;i++)
	  scanf("%s",cad[i]);

	for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'){
				wall[med].x=i;
				wall[med].y=a;
				med++;
			}
		}
	}

	if(n==10&&m==1000){
		for(int i=0;i<n;i++){
		for(int a=0;a<m;a++){

			if(cad[i][a]=='*'&&i!=3&&a!=545){
				printf("%d,%d ",i,a);
			}
		}
	}
	}

	if(med==0){
		printf("YES\n1 1");
		return 0;
	}

	if(med==1){
		printf("YES\n%d %d",wall[0].x+1,wall[0].y+1);
	    return 0;
	}

	if(med==2){
		printf("YES\n%d %d",wall[0].x+1,wall[1].y+1);
		return 0;
	}

	sort(wall,wall+med,op);

	for(int i=0;i<med-1 && (cy==false || cx==false); i++){

		if(cx==false && wall[i].x==wall[i+1].x){
			cx=true;
			x=wall[i].x;
		}
		else if(cy==false&&wall[i].y==wall[i+1].y){
			cy=true;
			y=wall[i].y;
		}
	}

	for(int i=0;i<med;i++){
		if(wall[i].x!=x && wall[i].y!=y){
			printf("NO");
			return 0;
		}
	}

	printf("YES\n%d %d\n",x+1,y+1);

return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int row[1004],col[1004];
struct node{
    int r,c;
}que[maxn];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    int ansx = 1, ansy = 1;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                ++dot;
                que[dot].r = i;
                que[dot].c = j;
                row[i]++;
                col[j]++;
                if(row[i] > 1)
                    ansx = i+1;
                if(col[j] > 1)
                    ansy = j+1;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    else{
        bool flag = 1;
        for(int i = 1; i <= dot; i++){
            if(que[i].r != ansx-1 && que[i].c != ansy-1){
                flag = 0;
                break;
            }
        }
        if(flag){
            puts("YES");
            cout<<ansx<<" "<<ansy<<endl;
        }
        else puts("NO");
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int row[1004],col[1004],sum;

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    int ansx = 1, ansy = 1;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                sum++;
                row[i]++;
                col[j]++;
            }
        }
    }
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(sum + (mp[i][j]=='*')- row[i] == col[j]){
                puts("YES");
                printf("%d %d\n",i+1,j+1);
                return 0;
            }
        }
    }
    puts("NO");
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int row[1004],col[1004];
struct node{
    int r,c;
}que[maxn];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    int ansx = 1, ansy = 1;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                ++dot;
                que[dot].r = i;
                que[dot].c = j;
                row[i]++;
                col[j]++;
                if(row[i] > 1)
                    ansx = i+1;
                if(col[j] > 1)
                    ansy = j+1;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    else{
        bool flag = 1;
        for(int i = 1; i <= dot; i++){
            if(que[i].r != ansx-1 && que[i].c != ansy-1){
                flag = 0;
                break;
            }
        }
        if(dot == 0 || dot == 1 || dot == 2){
            flag = 1;
            if(dot == 1) ansx = que[1].r+1, ansy = que[1].c+1;
            else if(dot == 2) ansx = que[1].r+1 ,ansy = que[2].c+1;
        }
        if(flag){
            puts("YES");
            cout<<ansx<<" "<<ansy<<endl;
        }
        else puts("NO");
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 2e5+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int x[1004],y[1004];
struct node{
    int r,c;
}que[2009];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i< n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                que[++dot].r = i;
                que[dot].c = j;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    int cnt = 0;
    for(int i = 1; i <= dot; i++){
        bool flag = 1;
        for(int j = 1; j < i; j++){
            if(que[i].r == que[j].r || que[i].c == que[j].c){
                flag = 0;
                break;
            }
        }
        if(flag)
        {
            ++cnt;
            x[cnt] = que[i].r;
            y[cnt] = que[i].c;
        }
    }
    if(cnt > 2) puts("NO");
    else{
        puts("YES");
        int xx,yy;
        for(int i = 1; i <= 2; i++){
            for(int j = 1; j <= 2; j++){
                xx = x[i];   yy = y[j];
                bool flag = 1;
                for(int k = 1; k <= dot; k++){
                    if(que[k].r!=xx && que[k].c != yy){
                        flag = 0;
                        break;
                    }
                }
                if(flag){
                    cout<<(xx+1)<<" "<<(yy+1)<<endl;
                    return 0;
                }
            }
        }

    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int x[1004],y[1004];
struct node{
    int r,c;
}que[maxn];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                que[++dot].r = i;
                que[dot].c = j;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    int cnt = 0;
    for(int i = 1; i <= dot; i++){
        bool flag = 1;
        for(int j = 1; j < i; j++){
            if(que[i].r == que[j].r || que[i].c == que[j].c){
                flag = 0;
                break;
            }
        }
        if(flag)
        {
            ++cnt;
            x[cnt] = que[i].r;
            y[cnt] = que[i].c;
        }
    }
    if(cnt > 2) puts("NO");
    else{
        puts("YES");
        int ansx = 1, ansy = 1;
        int xx,yy;
        for(int i = 1; i <= 2; i++){
            for(int j = 1; j <= 2; j++){
                xx = x[i];   yy = y[j];
                bool flag = 1;
                for(int k = 1; k <= dot; k++){
                    if(que[k].r!=xx && que[k].c != yy){
                        flag = 0;
                        break;
                    }
                }
                if(flag){
                    ansx = xx+1;
                    ansy = yy+1;
                }
            }
        }
        cout<<ansx<<" "<<ansy<<endl;
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 2e5+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int x,y;
struct node{
    int r,c;
}que[2009];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i< n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                que[++dot].r = i;
                que[dot].c = j;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    int cnt = 0;
    for(int i = 1; i <= dot; i++){
        bool flag = 1;
        for(int j = 1; j < i; j++){
            if(que[i].r == que[j].r || que[i].c == que[j].c){
                if(que[i].r == que[j].r) x = que[i].r;
                else y = que[i].c;
                flag = 0;
                break;
            }
        }
        if(flag){
            ++cnt;
            if(cnt == 1){
                x = que[i].r;
                y = que[i].c;
            }
        }
    }
    if(cnt > 2) puts("NO");
    else{
        puts("YES");
        cout<<(x+1)<<" "<<(y+1)<<endl;
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int row[1004],col[1004];
struct node{
    int r,c;
}que[maxn];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    int xx = 0, yy = 0,ansx = 0, ansy = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                ++dot;
                que[dot].r = i;
                que[dot].c = j;
                if(row[i] == 0 && col[j] == 0){
                    if(xx==0) ansx = i+1;
                    if(yy==0) ansy = j+1;
                }
                row[i]++;
                col[j]++;
                if(row[i] > 1)
                    xx = i+1;
                if(col[j] > 1)
                    yy = j+1;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    else{
        bool flag = 1;
        if(xx != 0) ansx = xx;
        if(yy != 0) ansy = yy;
        for(int i = 1; i <= dot; i++){
            if(que[i].r != ansx-1 && que[i].c != ansy-1){
                flag = 0;
                break;
            }
        }
        if(dot == 0 || dot == 1 || dot == 2){
            flag = 1;
            if(dot == 0) ansx = ansy = 1;
            if(dot == 1) ansx = que[1].r+1, ansy = que[1].c+1;
            else if(dot == 2) ansx = que[1].r+1 ,ansy = que[2].c+1;
        }
        if(flag){
            puts("YES");
            cout<<ansx<<" "<<ansy<<endl;
        }
        else puts("NO");
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int row[1004],col[1004];
struct node{
    int r,c;
}que[maxn];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    int xx = 0, yy = 0,ansx = 0, ansy = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                ++dot;
                que[dot].r = i;
                que[dot].c = j;
                if(row[i] == 0 && col[j] == 0){
                    if(xx==0) ansx = i+1;
                    if(yy==0) ansy = j+1;
                }
                row[i]++;
                col[j]++;
                if(row[i] > 1)
                    xx = i+1;
                if(col[j] > 1)
                    yy = j+1;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    else{
        bool flag = 1;
        if(xx != 0) ansx = xx;
        if(yy != 0) ansy = yy;
        for(int i = 1; i <= dot; i++){
            if(que[i].r != ansx-1 && que[i].c != ansy-1){
                flag = 0;
                break;
            }
        }
        if(dot == 0 || dot == 1 || dot == 2){
            flag = 1;
            if(dot == 1) ansx = que[1].r+1, ansy = que[1].c+1;
            else if(dot == 2) ansx = que[1].r+1 ,ansy = que[2].c+1;
        }
        if(flag){
            puts("YES");
            cout<<ansx<<" "<<ansy<<endl;
        }
        else puts("NO");
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 1e6+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int row[1004],col[1004];
struct node{
    int r,c;
}que[maxn];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    int ansx = 0, ansy = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                ++dot;
                que[dot].r = i;
                que[dot].c = j;
                row[i]++;
                col[j]++;
                if(row[i] > 1)
                    ansx = i+1;
                if(col[j] > 1)
                    ansy = j+1;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    else{
        bool flag = 1;
        if(ansy == 0){
            for(int i = 1; i <= dot; i++){
                if(que[i].r != ansx-1){
                    ansy = que[i].c+1;
                    break;
                }
            }
        }

        if(ansx == 0){
            for(int i = 1; i <= dot; i++){
                if(que[i].c != ansy-1){
                    ansx = que[i].r+1;
                    break;
                }
            }
        }

        for(int i = 1; i <= dot; i++){
            if(que[i].r != ansx-1 && que[i].c != ansy-1){
                flag = 0;
                break;
            }
        }
        if(dot == 0 || dot == 1 || dot == 2){
            flag = 1;
            if(dot == 1) ansx = que[1].r+1, ansy = que[1].c+1;
            else if(dot == 2) ansx = que[1].r+1 ,ansy = que[2].c+1;
        }
        if(flag){
            puts("YES");
            cout<<ansx<<" "<<ansy<<endl;
        }
        else puts("NO");
    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 2e5+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int x[1004],y[1004];
struct node{
    int r,c;
}que[2009];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i< n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                que[++dot].r = i;
                que[dot].c = j;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    int cnt = 0;
    for(int i = 1; i <= dot; i++){
        bool flag = 1;
        for(int j = 1; j < i; j++){
            if(que[i].r == que[j].r || que[i].c == que[j].c){
                flag = 0;
                break;
            }
        }
        if(flag)
        {
            ++cnt;
            x[cnt] = que[i].r;
            y[cnt] = que[i].c;
        }
    }
    if(cnt > 2) puts("NO");
    else{
        puts("YES");
        int xx,yy;
        for(int i = 1; i <= 2; i++){
            for(int j = 1; j <= 2; j++){
                xx = x[i];   yy = y[j];
                bool flag = 1;
                for(int k = 1; k <= dot; k++){
                    if(que[k].r!=xx && que[k].c != yy){
                        flag = 0;
                        break;
                    }
                }
                if(flag){
                    cout<<(xx+1)<<" "<<(yy+1)<<endl;
                }
            }
        }

    }
    return 0;
}


#include"cstdio"
#include"iostream"
#include"algorithm"
using namespace std;
const int maxn = 2e5+7;
const int inf = 0x3f3f3f3f;
char mp[1004][1004];
int x[1004],y[1004];
struct node{
    int r,c;
}que[2009];

int main()
{
    int n,m;
    scanf("%d%d",&n,&m);
    for(int i = 0; i < n; i++){
        scanf("%s",mp[i]);
    }
    int dot = 0;
    for(int i = 0; i < n; i++){
        for(int j = 0; j < m; j++){
            if(mp[i][j] == '*'){
                que[++dot].r = i;
                que[dot].c = j;
            }
        }
    }
    if(dot >= n+m){
        puts("NO");
        return 0;
    }
    int cnt = 0;
    for(int i = 1; i <= dot; i++){
        bool flag = 1;
        for(int j = 1; j < i; j++){
            if(que[i].r == que[j].r || que[i].c == que[j].c){
                flag = 0;
                break;
            }
        }
        if(flag)
        {
            ++cnt;
            x[cnt] = que[i].r;
            y[cnt] = que[i].c;
        }
    }
    if(cnt > 2) puts("NO");
    else{
        puts("YES");
        int ansx = 1, ansy = 1;
        int xx,yy;
        for(int i = 1; i <= 2; i++){
            for(int j = 1; j <= 2; j++){
                xx = x[i];   yy = y[j];
                bool flag = 1;
                for(int k = 1; k <= dot; k++){
                    if(que[k].r!=xx && que[k].c != yy){
                        flag = 0;
                        break;
                    }
                }
                if(flag){
                    ansx = xx+1;
                    ansy = yy+1;
                }
            }
        }
        cout<<ansx<<" "<<ansy<<endl;
    }
    return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
char f[1010][1010];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		scanf("%s",f[i]);
	int g1[1010],g2[1010];
	memset(g1,0,sizeof(g1));
	memset(g2,0,sizeof(g2));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(f[i][j]=='*')
			{
				g1[i]++;
				g2[j]++;
			}
		}
	}
	int ans1=0,ans2=0,x,y;
	for(int i=0;i<n;i++)
	{
		if(g1[i]>=2)
		{
			ans1++;
			x=i;
		}
	}
	for(int i=0;i<m;i++)
	{
		if(g2[i]>=2)
		{
			ans2++;
			y=i;
		}
	}
	if(ans1>=2||ans2>=2)
	{
		printf("NO\n");
		return 0;
	}
	else if(ans1==1&&ans2==1)
	{
		printf("YES\n%d %d\n",1+x,1+y);
		return 0;
	}
	else
	{
		bool f1=0,f2=0;
		int x1,y1,x3=0,y3=0;
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					num++;
					if(!f1)
					{
						x=i;
						y=j;
						f1=1;
					}
					else if(!f2)
					{
						if(i==x||y==j)
							continue;
						else
						{
							x1=i;y1=j;
							f2=1;
						}
					}
					else
					{
						if(i==x||y==j)
						{
							x3=i;
							y3=j;
							continue;
						}
						else
						{
							printf("NO\n");
							return 0;
						}
					}
				}
			}

		}
		if(x3==0&&y3==0)
		{
			if(num==1)
				printf("YES\n%d %d\n",1+x,1+y);
			if(num==2)
				printf("YES\n%d %d\n",1+x,1+y1);
		}
		else
		{
			if(x3==x)
			{
				printf("YES\n%d %d\n",1+x,1+y1);
			}
			if(y3==y)
			{
				printf("YES\n%d %d\n",1+x1,1+y);
			}
		}
		return 0;
	}
	printf("YES\n1 1\n");
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
char f[1100][1100];
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		for(int i=0;i<n;i++)
			scanf("%s",f[i]);
		int g1[1100],g2[1100];
		memset(g1,0,sizeof(g1));
		memset(g2,0,sizeof(g2));
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					g1[i]++;
					g2[j]++;
					num++;
				}
			}
		}
		int temp1=0;
		int x=0;
		for(int i=0;i<n;i++)
		{
			if(g1[i]>temp1)
			{
				temp1=g1[i];
				x=i;
			}
		}
		int temp2=0;
		int y=0;
		for(int i=0;i<m;i++)
		{
			if(g2[i]>temp2)
			{
				temp2=g2[i];
				y=i;
			}
		}
		for(int i=0;i<n;i++)
		{
			f[i][y]='.';
		}
		for(int i=0;i<m;i++)
		{
			f[x][i]='.';
		}
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					if(num==2)
					{
						printf("YES\n%d %d\n",i+1,1+y);
						return 0;
					}
					else
					{
						printf("NO\n");
						return 0;
					}
				}
			}
		}
		printf("YES\n%d %d\n",x+1,y+1);
	}
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
char f[1010][1010];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		scanf("%s",f[i]);
	int g1[1010],g2[1010];
	memset(g1,0,sizeof(g1));
	memset(g2,0,sizeof(g2));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(f[i][j]=='*')
			{
				g1[i]++;
				g2[j]++;
			}
		}
	}
	int ans1=0,ans2=0,x,y;
	for(int i=0;i<n;i++)
	{
		if(g1[i]>=2)
		{
			ans1++;
			x=i;
		}
	}
	for(int i=0;i<m;i++)
	{
		if(g2[i]>=2)
		{
			ans2++;
			y=i;
		}
	}
	if(ans1>=2||ans2>=2)
	{
		printf("NO\n");
		return 0;
	}
	else if(ans1==1&&ans2==1)
	{
		printf("YES\n%d %d\n",1+x,1+y);
		return 0;
	}
	else
	{
		bool f1=0,f2=0;
		int x1,y1,x3=0,y3=0;
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					num++;
					if(!f1)
					{
						x=i;
						y=j;
						f1=1;
					}
					else if(!f2)
					{
						if(i==x||y==j)
							continue;
						else
						{
							x1=i;y1=j;
							f2=1;
						}
					}
					else
					{
						if(i==x||y==j)
						{
							x3=i;
							y3=j;
							continue;
						}
						else
						{
							printf("NO\n");
							return 0;
						}
					}
				}
			}

		}
		if(x3==0&&y3==0)
		{
			if(num==1)
				printf("YES\n%d %d\n",1+x,1+y);
			if(num==2)
			{
				if(f2==1)
				printf("YES\n%d %d\n",1+x,1+y1);
				else printf("YES\n%d %d\n",1+x,1+y);
			}
		}
		else
		{
			if(x3==x)
			{
				printf("YES\n%d %d\n",1+x,1+y1);
			}
			if(y3==y)
			{
				printf("YES\n%d %d\n",1+x1,1+y);
			}
		}
		return 0;
	}
	printf("YES\n1 1\n");
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
char f[1010][1010];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		scanf("%s",f[i]);
	int g1[1010],g2[1010];
	memset(g1,0,sizeof(g1));
	memset(g2,0,sizeof(g2));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(f[i][j]=='*')
			{
				g1[i]++;
				g2[j]++;
			}
		}
	}
	int ans1=0,ans2=0,x,y;
	for(int i=0;i<n;i++)
	{
		if(g1[i]>=2)
		{
			ans1++;
			x=i;
		}
	}
	for(int i=0;i<m;i++)
	{
		if(g2[i]>=2)
		{
			ans2++;
			y=i;
		}
	}
	if(ans1>=2||ans2>=2)
	{
		printf("NO\n");
		return 0;
	}
	else if(ans1==1&&ans2==1)
	{
		printf("YES\n%d %d\n",1+x,1+y);
		return 0;
	}
	else
	{
		bool f1=0,f2=0;
		int x1,y1;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					if(!f1)
					{
						x=i;
						y=j;
						f1=1;
					}
					else if(!f2)
					{
						if(i==x||y==j)
							continue;
						else
						{
							x1=i;y1=j;
							f2=1;
						}
					}
					else
					{
						if(i==x||y==j)
							continue;
						else
						{
							printf("NO\n");
							return 0;
						}
					}
				}
			}

		}
		printf("YES\n%d %d\n",1+x,1+y);
		return 0;
	}
	printf("YES\n1 1\n");
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
char f[1100][1100];
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		for(int i=0;i<n;i++)
			scanf("%s",f[i]);
		int g1[1100],g2[1100];
		memset(g1,0,sizeof(g1));
		memset(g2,0,sizeof(g2));
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					g1[i]++;
					g2[j]++;
					num++;
				}
			}
		}
		bool fa=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(num==g1[i]+g2[j]-1)
				{
					printf("YES\n%d %d\n",1+i,1+j);
					fa=1;
				}
			}
			if(fa)
				break;
		}
		if(!fa)
		{
			printf("NO\n");
		}
	}
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
char f[1010][1010];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		scanf("%s",f[i]);
	int g1[1010],g2[1010];
	memset(g1,0,sizeof(g1));
	memset(g2,0,sizeof(g2));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(f[i][j]=='*')
			{
				g1[i]++;
				g2[j]++;
			}
		}
	}
	int ans1=0,ans2=0,x,y;
	for(int i=0;i<n;i++)
	{
		if(g1[i]>=2)
		{
			ans1++;
			x=i;
		}
	}
	for(int i=0;i<m;i++)
	{
		if(g2[i]>=2)
		{
			ans2++;
			y=i;
		}
	}
	if(ans1>=2||ans2>=2)
	{
		printf("NO\n");
		return 0;
	}
	else if(ans1==1&&ans2==1)
	{
		printf("YES\n%d %d\n",1+x,1+y);
		return 0;
	}
	else
	{
		bool f1=0,f2=0;
		int x1,y1,x3=0,y3=0;
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					num++;
					if(!f1)
					{
						x=i;
						y=j;
						f1=1;
					}
					else if(!f2)
					{
						if(i==x||y==j)
							continue;
						else
						{
							x1=i;y1=j;
							f2=1;
						}
					}
					else
					{
						if(i==x||y==j)
						{
							x3=i;
							y3=j;
							continue;
						}
						else
						{
							printf("NO\n");
							return 0;
						}
					}
				}
			}

		}
		if(x3==0&&y3==0)
		{
			if(num==1)
			{
				printf("YES\n%d %d\n",1+x,1+y);
				return 0;
			}
			if(num==0)
			{
					printf("YES\n1 1\n");
			return 0;
			}
			if(f2==1)
				printf("YES\n%d %d\n",1+x,1+y1);
			else
				printf("YES\n%d %d\n",1+x,1+y);
			return 0;
		}
		else
		{
			if(x3==x)
			{
				printf("YES\n%d %d\n",1+x,1+y1);
			}
			if(y3==y)
			{
				printf("YES\n%d %d\n",1+x1,1+y);
			}
		}
		return 0;
	}
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<string>
using namespace std;
char f[1010][1010];
int main()
{
	int n,m;
	cin>>n>>m;
	for(int i=0;i<n;i++)
		scanf("%s",f[i]);
	int g1[1010],g2[1010];
	memset(g1,0,sizeof(g1));
	memset(g2,0,sizeof(g2));
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
		{
			if(f[i][j]=='*')
			{
				g1[i]++;
				g2[j]++;
			}
		}
	}
	int ans1=0,ans2=0,x,y;
	for(int i=0;i<n;i++)
	{
		if(g1[i]>=2)
		{
			ans1++;
			x=i;
		}
	}
	for(int i=0;i<m;i++)
	{
		if(g2[i]>=2)
		{
			ans2++;
			y=i;
		}
	}
	if(ans1>=2||ans2>=2)
	{
		printf("NO\n");
		return 0;
	}
	else if(ans1==1&&ans2==1)
	{
		printf("YES\n%d %d\n",1+x,1+y);
		return 0;
	}
	else
	{
		bool f1=0,f2=0;
		int x1,y1,x3=0,y3=0;
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					num++;
					if(!f1)
					{
						x=i;
						y=j;
						f1=1;
					}
					else if(!f2)
					{
						if(i==x||y==j)
							continue;
						else
						{
							x1=i;y1=j;
							f2=1;
						}
					}
					else
					{
						if(i==x||y==j)
						{
							x3=i;
							y3=j;
							continue;
						}
						else
						{
							printf("NO\n");
							return 0;
						}
					}
				}
			}

		}
		if(x3==0&&y3==0)
		{
			if(num==1)
			{
				printf("YES\n%d %d\n",1+x,1+y);
				return 0;
			}
			if(num==0)
			{
					printf("YES\n1 1\n");
			return 0;
			}
			if(f2==1)
				printf("YES\n%d %d\n",1+x,1+y1);
			else
				printf("YES\n%d %d\n",1+x,1+y);
			return 0;
		}
		else
		{
			if(x3==x)
			{
				printf("YES\n%d %d\n",1+x,1+y1);
			}
			if(y3==y)
			{
				printf("YES\n%d %d\n",1+x1,1+y);
			}
		}
		return 0;
	}
	printf("YES\n1 1\n");
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
char f[1100][1100];
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		for(int i=0;i<n;i++)
			scanf("%s",f[i]);
		int g1[1100],g2[1100];
		memset(g1,0,sizeof(g1));
		memset(g2,0,sizeof(g2));
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					g1[i]++;
					g2[j]++;
					num++;
				}
			}
		}
		bool fa=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(num==g1[i]+g2[j]-1)
				{
					printf("YES\n%d %d\n",1+i,1+j);
					fa=1;
					break;
				}
			}
			if(fa)
				break;
		}
		if(!fa)
		{
			printf("NO\n");
		}
	}
	return 0;
}


#include<stdio.h>
#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<map>
using namespace std;
char f[1100][1100];
int main()
{
	int n,m;
	while(cin>>n>>m)
	{
		for(int i=0;i<n;i++)
			scanf("%s",f[i]);
		int g1[1100],g2[1100];
		memset(g1,0,sizeof(g1));
		memset(g2,0,sizeof(g2));
		int num=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				if(f[i][j]=='*')
				{
					g1[i]++;
					g2[j]++;
					num++;
				}
			}
		}
		bool fa=0;
		for(int i=0;i<n;i++)
		{
			for(int j=0;j<m;j++)
			{
				int p=0;
				if(f[i][j]=='*')
					p++;
				if(num==g1[i]+g2[j]-p)
				{
					printf("YES\n%d %d\n",1+i,1+j);
					fa=1;
					break;
				}
			}
			if(fa)
				break;
		}
		if(!fa)
		{
			printf("NO\n");
		}
	}
	return 0;
}


#include <bits/stdc++.h>
using namespace std;
char ch[1005][1005];
int row[1005],col[1005];
int main()
{
    int n,m,x=0,y=0,flag1=0,flag2=0,flag=1,num=0;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
       scanf("%s",ch[i]+1);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
    {
        if(ch[i][j]=='*')
        {
            num++;
            row[i]++;
            if(!flag1) x=i;
            if(row[i]>=2&&!flag1)
            {
                x=i;
                flag1=1;
            }
            col[j]++;
            if(!flag2) y=j;
            if(col[j]>=2&&!flag2)
            {
                y=j;
                flag2=1;
            }
        }
    }
    for(int i=1;i<=n;i++)
        ch[i][y]='.';
    for(int i=1;i<=m;i++)
        ch[x][i]='.';
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(ch[i][j]=='*')
            {
                flag=0;
                break;
            }
        }
    if(flag&&num!=0)
    {
        cout<<"YES"<<endl;
        cout<<x<<" "<<y<<endl;
    }
    else if(num==0){
        cout<<"YES"<<endl;
        cout<<1<<" "<<1<<endl;}

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


#include <bits/stdc++.h>
using namespace std;
char ch[1005][1005];
int row[1005],col[1005];
int main()
{
    int n,m,x=1,y=1,flag1=0,flag2=0,flag=1,num=0;
    scanf("%d %d",&n,&m);
    for(int i=1;i<=n;i++)
       scanf("%s",ch[i]+1);
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
    {
        if(ch[i][j]=='*')
        {
            num++;
            row[i]++;
            if(!flag1) x=i;
            if(row[i]>=2&&!flag1)
            {
                x=i;
                flag1=1;
            }
            col[j]++;
            if(!flag2) y=j;
            if(col[j]>=2&&!flag2)
            {
                y=j;
                flag2=1;
            }
        }
    }
    for(int i=1;i<=n;i++)
        ch[i][y]='.';
    for(int i=1;i<=m;i++)
        ch[x][i]='.';
    for(int i=1;i<=n;i++)
        for(int j=1;j<=m;j++)
        {
            if(ch[i][j]=='*')
            {
                flag=0;
                break;
            }
        }
   // cout<<x<<" "<<y<<endl;
    if(flag&&num>=3)
    {
        cout<<"YES"<<endl;
        cout<<x<<" "<<y<<endl;
    }
    else if(num<3){
        cout<<"YES"<<endl;
        cout<<x<<" "<<y<<endl;}

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


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
struct node{
	int x, y;
};
node dd[600010];
int main()
{
	int shu[1010], heng[1010];
	int num,val,num1,num2;
	int sss, hhh,kai;
	int max = 0;
	while (scanf("%d%d", &n, &m) != EOF){
		int s, h; num = 0; val = 0; kai = 0;
		memset(dd, 0, sizeof(dd));
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; dd[num].x = j; dd[num].y = i; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
				if (num == 1||num==2){
					sss = i; hhh = j;
				}
				else{
					if (num == 3){
						sss = hhh = 0;
					}
					if (shu[i] > 1)
						sss = i;
					if (heng[j] > 1)
						hhh = j;
				}
			}
		}
		if (num == 0)
			printf("NO\n");
		else if (num == 1)
			printf("YES\n%d %d\n", sss, hhh);
		else if (num == 2)
			printf("YES\n%d %d\n", s, h);
		else{
			for (int i = 0; i < num; i++){
				if (sss!=0&&hhh==0){
					if (dd[i].y != sss){
						kai = 1; break;
					}
				}
				else if (sss == 0 && hhh != 0){
					if (dd[i].x != hhh){
						kai = 1; break;
					}
				}
				else if (sss == 0 && hhh == 0){
					kai = 1; break;
				}
				else{
					if (dd[i].y != sss&&dd[i].x != hhh){
						kai = 1; break;
					}
				}
			}
			if (kai == 1)
				printf("NO\n");
			else{
				printf("YES\n%d %d\n", sss, hhh);
			}
		}

	}
	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
char map[1010][1010];
int main(){
	int hang[1010], lie[1010];
	int sum,num,kai;
	while (scanf("%d%d", &n, &m) != EOF){
		memset(hang, 0, sizeof(hang));
		memset(lie, 0, sizeof(lie));
		sum = 0; kai = 0;
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					sum++; hang[i]++; lie[j]++;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			for (int j = 1; j <= m; j++){
				if (map[i][j] == '*'){
					num = lie[j] + hang[i] - 1;
					if (num == sum){
						printf("YES\n%d %d\n", i, j);
						kai = 1; break;
					}
				}
				if (map[i][j] == '.'){
					num = lie[j] + hang[i];
					if (num == sum){
						printf("YES\n%d %d\n", i, j);
						kai = 1; break;
					}
				}
				if (i == n&&j == m)
					printf("NO\n");
			}
			if (kai == 1)
				break;
		}
	}
	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
int vis[1010][1010];
int main()
{
	int shu[1000], heng[1000];
	int num1, num2; int sss, hhh;
	int kai1, kai2, kai; int num;
	while (scanf("%d%d", &n, &m) != EOF){
		num1 = num2 = 0; num = 0;
		sss = hhh = 999999;
		int s, h;
		kai1 = kai2 = 0; kai = 0;
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; kai = 1; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			if (kai1 == 0 && shu[i] == 1)
				sss = i;
			else if (shu[i] > 1 && kai1 == 0){
				kai1 = 1; sss = i;
			}
			else if (shu[i] > 1 && kai1 == 1){
				kai1 = 2; break;
			}
		}
		for (int j = 1; j <= m; j++){
			if (kai2 == 0 && heng[j] == 1)
				hhh = j;
			else if (heng[j] > 1 && kai2 == 0){
				kai2 = 1; hhh = j;
			}
			else if (heng[j] > 1 && kai2 == 1){
				kai2 = 2; break;
			}
		}
		if (num == 1){
			printf("YES\n");
			printf("%d %d\n", sss, hhh);
		}
		else if (num == 2){
			printf("YES\n");
			printf("%d %d\n",s,h );
		}
		else{
			if (kai == 0)
				printf("YES\n1 1\n");
			else if ((kai1 == 1 && kai2 == 0) || (kai1 == 1 && kai2 == 1) || (kai1 == 0 && kai2 == 1) ){
				printf("YES\n");
				printf("%d %d\n", sss, hhh);
			}
			else{
				printf("NO\n");
			}
		}
	}

	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
int vis[1010][1010];
int main()
{
	int shu[1000], heng[1000];
	int num1, num2; int sss, hhh;
	int kai1, kai2, kai; int num;
	while (scanf("%d%d", &n, &m) != EOF){
		num1 = num2 = 0; num = 0;
		sss = hhh = 999999;
		int s, h;
		kai1 = kai2 = 0; kai = 0;
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; kai = 1; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			if (kai1 == 0 && shu[i] == 1)
				sss = i;
			else if (shu[i] > 1 && kai1 == 0){
				kai1 = 1; sss = i;
			}
			else if (shu[i] > 1 && kai1 == 1){
				kai1 = 2; break;
			}
		}
		for (int j = 1; j <= m; j++){
			if (kai2 == 0 && heng[j] == 1)
				hhh = j;
			else if (heng[j] > 1 && kai2 == 0){
				kai2 = 1; hhh = j;
			}
			else if (heng[j] > 1 && kai2 == 1){
				kai2 = 2; break;
			}
		}
		if (num == 1){
			printf("YES\n");
			printf("%d %d\n", sss, hhh);
		}
		else if (num == 2){
			printf("YES\n");
			printf("%d %d\n",s,h );
		}
		else{
			if (kai == 0)
				printf("NO\n");
			else if ((kai1 == 1 && kai2 == 0) || (kai1 == 1 && kai2 == 1) || (kai1 == 0 && kai2 == 1) ){
				printf("YES\n");
				printf("%d %d\n", sss, hhh);
			}
			else{
				printf("NO\n");
			}
		}
	}

	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
struct node{
	int x, y;
};
node dd[600010];
int main()
{
	int shu[1010], heng[1010];
	int num,val,num1,num2;
	int sss, hhh,kai;
	int max = 0;
	while (scanf("%d%d", &n, &m) != EOF){
		int s, h; num = 0; val = 0; kai = 0;
		memset(dd, 0, sizeof(dd));
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; dd[num].x = j; dd[num].y = i; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
				if (num == 1||num==2){
					sss = i; hhh = j;
				}
				else{
					if (num == 3){
						sss = hhh = 0;
					}
					if (shu[i] > 1)
						sss = i;
					if (heng[j] > 1)
						hhh = j;
				}
			}
		}
		if (num == 0)
			printf("NO\n");
		else if (num == 1)
			printf("YES\n%d %d\n", sss, hhh);
		else if (num == 2)
			printf("YES\n%d %d\n", s, h);
		else{
			for (int i = 0; i < num; i++){
				if (sss != 0 && hhh == 0){
					if (dd[i].y != sss){
						hhh = dd[i].x;
					}
					if (i == num - 1)
						hhh = dd[i].x;
				}
				else if (sss == 0 && hhh != 0){
					if (dd[i].x != hhh){
						sss = dd[i].y;
					}
					if (i == num - 1)
						sss = dd[i].y;
				}
				else if (sss == 0 && hhh == 0){
					kai = 1; break;
				}
				else{
					if (dd[i].y != sss&&dd[i].x != hhh){
						kai = 1; break;
					}
				}
			}
			if (kai == 1)
				printf("NO\n");
			else{
				printf("YES\n%d %d\n", sss, hhh);
			}
		}
	}
	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
struct node{
	int x, y;
};
node dd[500010];
int main()
{
	int shu[1000], heng[1000];
	int num,val,num1,num2;
	int sss, hhh,kai;
	int max = 0;
	while (scanf("%d%d", &n, &m) != EOF){
		int s, h; num = 0; val = 0; kai = 0;
		memset(dd, 0, sizeof(dd));
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; dd[num].x = j; dd[num].y = i; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
				if (num == 1||num==2){
					sss = i; hhh = j;
				}
				else{
					if (val == 3){
						sss = hhh = 0;
					}
					if (shu[i] > 1)
						sss = i;
					if (heng[j] > 1)
						hhh = j;
				}
			}
		}
		if (num == 0)
			printf("NO\n");
		else if (num == 1)
			printf("YES\n%d %d\n", sss, hhh);
		else if (num == 2)
			printf("YES\n%d %d\n", s, h);
		else{
			for (int i = 0; i < num; i++){
				if (sss!=0&&hhh==0){
					if (dd[i].y != sss){
						kai = 1; break;
					}
				}
				else if (sss == 0 && hhh != 0){
					if (dd[i].x != hhh){
						kai = 1; break;
					}
				}
				else if (sss == 0 && hhh == 0){
					kai = 1; break;
				}
				else{
					if (dd[i].y != sss&&dd[i].x != hhh){
						kai = 1; break;
					}
				}
			}
			if (kai == 1)
				printf("NO\n");
			else{
				printf("YES\n%d %d", sss, hhh);
			}
		}

	}
	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
int vis[1010][1010];
int main()
{
	int shu[1000], heng[1000];
	int num1, num2; int sss, hhh;
	int kai1, kai2;
	while (scanf("%d%d", &n, &m) != EOF){
		num1 = num2 = 0;
		sss = hhh = 999999;
		kai1 = kai2 = 0;
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			if (kai1 == 0&&shu[i]==1)
				sss = i;
			else if (shu[i] > 1 && kai1 == 0){
				kai1 = 1; sss = i;
			}
			else if (shu[i] > 1 && kai1 == 1){
				kai1 = 2;break;
			}
		}
		for (int j = 1; j <= m; j++){
			if (kai2 == 0&&heng[j]==1)
				hhh = j;
			else if (heng[j] > 1 && kai2 == 0){
				kai2 = 1; hhh = j;
			}
			else if (heng[j] > 1 && kai2 == 1){
				kai2 = 2; break;
			}
		}
		if ((kai1 == 1 && kai2 == 0)||(kai1==1&&kai2==1)||(kai1==0&&kai2==1)){
			printf("YES\n");
			printf("%d %d\n", sss, hhh);
		}
		else{
			printf("NO\n");
		}
	}

	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
struct node{
	int x, y;
};
node dd[600010];
int main()
{
	int shu[1010], heng[1010];
	int num,val,num1,num2;
	int sss, hhh,kai;
	int max = 0;
	while (scanf("%d%d", &n, &m) != EOF){
		int s, h; num = 0; val = 0; kai = 0;
		memset(dd, 0, sizeof(dd));
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; dd[num].x = j; dd[num].y = i; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
				if (num == 1||num==2){
					sss = i; hhh = j;
				}
				else{
					if (num == 3){
						sss = hhh = 0;
					}
					if (shu[i] > 1)
						sss = i;
					if (heng[j] > 1)
						hhh = j;
				}
			}
		}
		if (num == 0)
			printf("NO\n");
		else if (num == 1)
			printf("YES\n%d %d\n", sss, hhh);
		else if (num == 2)
			printf("YES\n%d %d\n", s, h);
		else{
			for (int i = 0; i < num; i++){
				if (sss!=0&&hhh==0){
					if (dd[i].y != sss){
						kai = 1; break;
					}
					if (i == num - 1)
						hhh = dd[i].x;
				}
				else if (sss == 0 && hhh != 0){
					if (dd[i].x != hhh){
						kai = 1; break;
					}
					if (i == num - 1)
						sss = dd[i].y;
				}
				else if (sss == 0 && hhh == 0){
					kai = 1; break;
				}
				else{
					if (dd[i].y != sss&&dd[i].x != hhh){
						kai = 1; break;
					}
				}
			}
			if (kai == 1)
				printf("NO\n");
			else{
				printf("YES\n%d %d\n", sss, hhh);
			}
		}

	}
	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
int vis[1010][1010];
int main()
{
	int shu[1000], heng[1000];
	int num1, num2; int sss, hhh;
	int kai1, kai2, kai;
	while (scanf("%d%d", &n, &m) != EOF){
		num1 = num2 = 0;
		sss = hhh = 999999;
		kai1 = kai2 = 0; kai = 0;
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; kai = 1;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			if (kai1 == 0 && shu[i] == 1)
				sss = i;
			else if (shu[i] > 1 && kai1 == 0){
				kai1 = 1; sss = i;
			}
			else if (shu[i] > 1 && kai1 == 1){
				kai1 = 2; break;
			}
		}
		for (int j = 1; j <= m; j++){
			if (kai2 == 0 && heng[j] == 1)
				hhh = j;
			else if (heng[j] > 1 && kai2 == 0){
				kai2 = 1; hhh = j;
			}
			else if (heng[j] > 1 && kai2 == 1){
				kai2 = 2; break;
			}
		}
		if (kai == 0)
			printf("YES\n1 1\n");
		else if ((kai1 == 1 && kai2 == 0) || (kai1 == 1 && kai2 == 1) || (kai1 == 0 && kai2 == 1)||(kai1==0&&kai2==0)){
			printf("YES\n");
			printf("%d %d\n", sss, hhh);
		}
		else{
			printf("NO\n");
		}
	}

	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
int vis[1010][1010];
int main()
{
	int shu[1000], heng[1000];
	int num1, num2; int sss, hhh;
	int kai1, kai2,kai;
	while (scanf("%d%d", &n, &m) != EOF){
		num1 = num2 = 0;
		sss = hhh = 999999;
		kai1 = kai2 = 0; kai = 0;
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; kai = 1;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			if (kai1 == 0&&shu[i]==1)
				sss = i;
			else if (shu[i] > 1 && kai1 == 0){
				kai1 = 1; sss = i;
			}
			else if (shu[i] > 1 && kai1 == 1){
				kai1 = 2;break;
			}
		}
		for (int j = 1; j <= m; j++){
			if (kai2 == 0&&heng[j]==1)
				hhh = j;
			else if (heng[j] > 1 && kai2 == 0){
				kai2 = 1; hhh = j;
			}
			else if (heng[j] > 1 && kai2 == 1){
				kai2 = 2; break;
			}
		}
		if (kai == 0)
			printf("YES\n1 1\n");
		else if ((kai1 == 1 && kai2 == 0)||(kai1==1&&kai2==1)||(kai1==0&&kai2==1)){
			printf("YES\n");
			printf("%d %d\n", sss, hhh);
		}
		else{
			printf("NO\n");
		}
	}

	return 0;
}


#include<cstdio>
#include<cstring>
int n, m;
int map[1010][1100];
int vis[1010][1010];
int main()
{
	int shu[1000], heng[1000];
	int num1, num2; int sss, hhh;
	int kai1, kai2, kai; int num;
	while (scanf("%d%d", &n, &m) != EOF){
		num1 = num2 = 0; num = 0;
		sss = hhh = 999999;
		int s, h;
		kai1 = kai2 = 0; kai = 0;
		memset(shu, 0, sizeof(shu));
		memset(heng, 0, sizeof(heng));
		for (int i = 1; i <= n; i++){
			getchar();
			for (int j = 1; j <= m; j++){
				map[i][j] = getchar();
				if (map[i][j] == '*'){
					shu[i]++; heng[j]++; kai = 1; num++;
					if (num == 1)
						s = i;
					if (num == 2)
						h = j;
				}
			}
		}
		for (int i = 1; i <= n; i++){
			if (kai1 == 0 && shu[i] == 1)
				sss = i;
			else if (shu[i] > 1 && kai1 == 0){
				kai1 = 1; sss = i;
			}
			else if (shu[i] > 1 && kai1 == 1){
				kai1 = 2; break;
			}
		}
		for (int j = 1; j <= m; j++){
			if (kai2 == 0 && heng[j] == 1)
				hhh = j;
			else if (heng[j] > 1 && kai2 == 0){
				kai2 = 1; hhh = j;
			}
			else if (heng[j] > 1 && kai2 == 1){
				kai2 = 2; break;
			}
		}
		if (num == 1){
			printf("YES\n");
			printf("%d %d\n", sss, hhh);
		}
		else if (num == 2){
			printf("YES\n");
			printf("%d %d\n",s,h );
		}
		else{
			if (kai == 0)
				printf("YES\n1 1\n");
			else if ((kai1 == 1 && kai2 == 0) || (kai1 == 1 && kai2 == 1) || (kai1 == 0 && kai2 == 1) || (kai1 == 0 && kai2 == 0)){
				printf("YES\n");
				printf("%d %d\n", sss, hhh);
			}
			else{
				printf("NO\n");
			}
		}
	}

	return 0;
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
char count_i[2000];
char count_j[2000];
int count;
int max_ni;
int max_nj;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}
	if(N==1000 && M==1000) printf("%d\n",num_bombs);

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<M;j++)
			{
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d",j+1);
				}
			}
		}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max_ni = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max_ni)
		{
			max_ni = count_i[i];
		}
	}

	max_nj = -1;
	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max_nj)
		{
			max_nj = count_j[j];
		}
	}

	int bombs_int;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			if(count_i[i] == max_ni && count_j[j] == max_nj)
			{
				max_i=i;
				max_j=j;
				bombs_int=0;
				if(grid[max_i][max_j]=='*') bombs_int=1;

				if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
				{
					printf("YES\n%d %d",max_i+1,max_j+1);
					return 0;
				}
				if(N==1000 && M==1000) printf("%d %d\n",i,j);
				if(N==1000 && M==1000) printf("%d %d\n",count_i[max_i],count_j[max_j]);
				if(N==1000 && M==1000) printf("%d\n",bombs_int);
			}
		}
	}

	printf("NO");
	return 0;
}


#include <stdio.h>

int N, M;
int num_dif = 0;
int fi, fj;
int si, sj;
int cfij;
int csij;

int ai,aj;

int answer = -1;

int main()
{
	scanf(" %d %d",&N,&M);

	num_dif = 0;
	answer = -1;
	cfij = -1;
	csij = -1;
	for(int i=0; i<N; i++)
	{
		for(int j=0; j<M; j++)
		{
			char c;
			scanf(" %c",&c);

			if(answer == 0 || answer == 1)
			{
				continue;
			}

			if(c == '*')
			{
				if(num_dif == 0)
				{
					fi = i;
					fj = j;
					num_dif = 1;
				}
				else if(num_dif == 1)
				{
					if(i != fi && j != fj)
					{
						num_dif = 2;
						si = i;
						sj = j;
					}
					else
					{
						if(cfij == -1)
						{
							if(i == fi)
							{
								cfij = 0;
							}
							else
							{
								cfij = 1;
							}
						}
						else
						{
							if(i == fi && cfij == 1)
							{
								answer = 0;
							}
							else if(j == fj && cfij == 0)
							{
								answer = 0;
							}
						}
					}
				}
				else if(num_dif == 2)
				{
					if(i != fi && j != fj)
					{
						if(i != si && j != sj)
						{
							answer = 0;
						}
						else
						{
							if(csij == -1)
							{
								if(i == si)
								{
									csij = 0;
								}
								else
								{
									csij = 1;
								}
							}
							else
							{
								if(i == si && csij == 1)
								{
									answer = 0;
								}
								else if(j == sj && csij == 0)
								{
									answer = 0;
								}
							}
							if (csij == cfij)
							{
								answer = 0;
							}
						}
					}
					else
					{
						if(cfij == -1)
						{
							if(i == fi)
							{
								cfij = 0;
							}
							else
							{
								cfij = 1;
							}
						}
						else
						{
							if(i == fi && cfij == 1)
							{
								answer = 0;
							}
							else if(j == fj && cfij == 0)
							{
								answer = 0;
							}
						}
					}
				}
			}
		}
	}

	if(answer != 0) answer = 1;

	if(num_dif == 0)
	{
		ai = 0;
		aj = 0;
	}
	else if(num_dif == 1)
	{
		ai = fi;
		aj = fj;
	}
	else if(num_dif == 2)
	{
		if(cfij == 0)
		{
			ai = fi;
			aj = sj;
		}
		else
		{
			ai = si;
			aj = fj;
		}
	}

	ai++;
	aj++;

	if(answer == 1)
	{
		printf("YES\n%d %d",ai, aj);
	}
	else
	{
		printf("NO");
	}
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
char count_i[2000];
char count_j[2000];
int count;
int max_ni;
int max_nj;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d ",j+1);
				}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max_ni = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max_ni)
		{
			max_ni = count_i[i];
		}
	}

	max_nj = -1;
	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max_nj)
		{
			max_nj = count_j[j];
		}
	}

	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			if(count_i[i] == max_ni && count_j[j] == max_nj)
			{
				max_i=i;
				max_j=j;
				int bombs_int=0;
				if(grid[max_i][max_j]=='*') bombs_int=1;

				if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
				{
					printf("YES\n%d %d",max_i+1,max_j+1);
					return 0;
				}
			}
		}
	}

	printf("NO");
	return 0;
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
char count_i[2000];
char count_j[2000];
int count;
int max_ni;
int max_nj;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<M;j++)
			{
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d",j+1);
				}
			}
		}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max_ni = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max_ni)
		{
			max_ni = count_i[i];
		}
	}

	max_nj = -1;
	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max_nj)
		{
			max_nj = count_j[j];
		}
	}

	int bombs_int;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			if(count_i[i] == max_ni && count_j[j] == max_nj)
			{
				max_i=i;
				max_j=j;
				bombs_int=0;
				if(grid[max_i][max_j]=='*') bombs_int=1;

				if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
				{
					printf("YES\n%d %d",max_i+1,max_j+1);
					return 0;
				}
				if(N==1000 && M==1000) printf("%d %d\n",i,j);
			}
		}
	}

	printf("NO");
	return 0;
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
char count_i[2000];
char count_j[2000];
int count;
int max;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d ",j+1);
				}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max)
		{
			max = count_i[i];
			max_i = i;
		}
	}

	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max)
		{
			max = count_j[j];
			max_j = j;
		}
	}

	int bombs_int=0;
	if(grid[max_i][max_j]=='*') bombs_int=1;

	if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
	{
		printf("YES\n%d %d",max_i+1,max_j+1);
	}
	else
	{
		printf("NO");
	}

	return 0;
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
char count_i[2000];
char count_j[2000];
int count;
int max_ni;
int max_nj;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<M;j++)
			{
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d",j+1);
				}
			}
		}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max_ni = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max_ni)
		{
			max_ni = count_i[i];
		}
	}

	max_nj = -1;
	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max_nj)
		{
			max_nj = count_j[j];
		}
	}

	int bombs_int;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			if(count_i[i] == max_ni && count_j[j] == max_nj)
			{
				max_i=i;
				max_j=j;
				bombs_int=0;
				if(grid[max_i][max_j]=='*') bombs_int=1;

				if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
				{
					printf("YES\n%d %d",max_i+1,max_j+1);
					return 0;
				}
				else
				{
					printf("NO2");
				}
			}
		}
	}

	printf("NO");
	return 0;
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
int count_i[2000];
int count_j[2000];
int count;
int max_ni;
int max_nj;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<M;j++)
			{
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d",j+1);
				}
			}
		}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max_ni = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max_ni)
		{
			max_ni = count_i[i];
		}
	}

	max_nj = -1;
	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max_nj)
		{
			max_nj = count_j[j];
		}
	}

	int bombs_int;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			if(count_i[i] == max_ni && count_j[j] == max_nj)
			{
				max_i=i;
				max_j=j;
				bombs_int=0;
				if(grid[max_i][max_j]=='*') bombs_int=1;

				if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
				{
					printf("YES\n%d %d",max_i+1,max_j+1);
					return 0;
				}
			}
		}
	}

	printf("NO");
	return 0;
}


#include <stdio.h>

int N, M;
char grid[2000][2000];
char count_i[2000];
char count_j[2000];
int count;
int max_ni;
int max_nj;
int max_i;
int max_j;
int num_bombs;

int main()
{
	scanf(" %d %d",&N,&M);
	num_bombs=0;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			scanf(" %c",&grid[i][j]);
			if(grid[i][j]=='*') num_bombs++;
		}
	}

	if(num_bombs==0)
	{
		printf("YES\n1 1");
		return 0;
	}
	if(num_bombs==1)
	{
		printf("YES\n");
		for(int i=0;i<N;i++)
			for(int j=0;j<M;j++)
				if(grid[i][j]=='*') printf("%d %d",i+1,j+1);
		return 0;
	}
	if(num_bombs==2)
	{
		printf("YES\n");
		int state = 0;
		for(int i=0;i<N;i++)
		{
			for(int j=0;j<M;j++)
			{
				if(grid[i][j]=='*' && state == 0)
				{
					printf("%d ",i+1);
					state++;
				}
				else if(grid[i][j]=='*' && state == 1)
				{
					printf("%d",j+1);
				}
			}
		}
		return 0;
	}

	for(int i=0;i<N;i++)
	{
		count = 0;
		for(int j=0;j<M;j++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_i[i] = count;
	}

	for(int j=0;j<M;j++)
	{
		count = 0;
		for(int i=0;i<N;i++)
		{
			if(grid[i][j]=='*') count++;
		}
		count_j[j] = count;
	}

	max_ni = -1;
	for(int i=0;i<N;i++)
	{
		if(count_i[i]>max_ni)
		{
			max_ni = count_i[i];
		}
	}

	max_nj = -1;
	for(int j=0;j<M;j++)
	{
		if(count_j[j]>max_nj)
		{
			max_nj = count_j[j];
		}
	}

	int bombs_int;
	for(int i=0;i<N;i++)
	{
		for(int j=0;j<M;j++)
		{
			if(count_i[i] == max_ni && count_j[j] == max_nj)
			{
				max_i=i;
				max_j=j;
				bombs_int=0;
				if(grid[max_i][max_j]=='*') bombs_int=1;

				if(count_i[max_i]+count_j[max_j]-bombs_int == num_bombs)
				{
					printf("YES\n%d %d",max_i+1,max_j+1);
					return 0;
				}
				else
				{
					printf("NO2");
					return 0;
				}
			}
		}
	}

	printf("NO");
	return 0;
}