#include<stdio.h>
char A[310], B[310][310];
int par[90010], edge;
int Find(int v){return v==par[v]?v:par[v]=Find(par[v]);}
int main(int argc, char *argv[2])
{
    FILE *inn = fopen(argv[1], "r");  // ÀÔ·Â ÆÄÀÏÀÔ´Ï´Ù!!!!!
    FILE *in = fopen(argv[2], "r");   // »ç¿ëÀÚ Ãâ·ÂÆÄÀÏ
    int a, b;
    fscanf(inn, "%d %d", &a, &b);
    for(int i=0;i<a;i++)
    {
        fscanf(inn, "%s", A);
        fscanf(in, "%s", B[i]);
        for(int j=0;j<b;j++)if(B[i][j]!='.'&&B[i][j]!='X')return !printf("0");
        for(int j=0;j<b;j++)if(B[i][j]=='.'&&A[j]=='X')return !printf("0");
    }
    for(int i=0;i<a*b;i++)par[i]=i;
    int i, j;
    for(i=0;i<a;i++)for(j=0;j<b;j++)
    {
        if(i+1<a&&B[i+1][j]=='X'&&B[i][j]=='X')
        {
            edge++;
            par[Find(i*b+j)]=Find((i+1)*b+j);
        }
        if(j+1<b&&B[i][j+1]=='X'&&B[i][j]=='X')
        {
            edge++;
            par[Find(i*b+j)]=Find(i*b+j+1);
        }
    }
    if(edge==0)edge=-1;
    int x=-1;
    for(i=0;i<a;i++)for(j=0;j<b;j++)if(B[i][j]=='X')
    {
        edge--;
        if(x==-1)x=Find(i*b+j);
        else if(x!=Find(i*b+j))
        {
            return !printf("0");
        }
    }
    if(edge!=-1)return !printf("0");
    return !printf("1");
}
