#include <bits/stdc++.h>   int n, m;   int map[1010][1010];   int strpnt[1001000][2];   int q[1001000][2];   int qs, qe;   int stn;   int ans;   int gcd(int x, int y) {     if (y == 0) return x;     return gcd(y, x % y);   }   int main() {     int i, j, k, l, t;     scanf( %d%d , &n, &m);     for (i = 0; i < n; i++) {       for (j = 0; j < m; j++) {         scanf( %d , &map[i + 1][j + 1]);       }     }     n += 2;     m += 2;     k = 0;     for (i = 0; i < n; i++) {       for (j = 0; j < m; j++) {         if (map[i + 1][j + 1] == 1) {           t = 0;           t += map[i][j + 1];           t += map[i + 1][j];           t += map[i + 1][j + 2];           t += map[i + 2][j + 1];           if (t == 1 || t == 3) {             k++;           }           if (t == 0) {             printf( -1 );             return 0;           }         }       }     }     if (k != 0 && k != 2) {       printf( -1 );       return 0;     }     for (i = 0; i < n; i++) {       for (j = 0; j < m; j++) {         if (map[i + 1][j + 1] == 1) {           t = 0;           t += map[i][j + 1];           t += map[i + 1][j];           t += map[i + 1][j + 2];           t += map[i + 2][j + 1];           if (t != 2 || (!(((map[i][j + 1] == 1 && map[i + 2][j + 1] == 1) ||                             (map[i + 1][j] == 1 && map[i + 1][j + 2] == 1))))) {             strpnt[stn][0] = i;             strpnt[stn][1] = j;             stn++;           }         }       }     }     if (stn < 2) {       printf( -1 );       return 0;     }     for (i = 1; i < stn; i++) {       strpnt[i][0] -= strpnt[0][0];       if (strpnt[i][0] < 0) strpnt[i][0] = -strpnt[i][0];       strpnt[i][1] -= strpnt[0][1];       if (strpnt[i][1] < 0) strpnt[i][1] = -strpnt[i][1];       ans = gcd(strpnt[i][0], ans);       ans = gcd(strpnt[i][1], ans);     }     if (ans < 2) {       printf( -1 );       return 0;     }     t = 0;     for (i = 0; i < n; i++) {       for (j = 0; j < m; j++) {         if (map[i][j] == 1) {           t = 1;           break;         }       }       if (t == 1) break;     }     qe = 1;     q[0][0] = i;     q[0][1] = j;     map[i][j] = 0;     for (qs = 0; qs < qe; qs++) {       if (map[q[qs][0] + 1][q[qs][1]] == 1) {         map[q[qs][0] + 1][q[qs][1]] = 0;         q[qe][0] = q[qs][0] + 1;         q[qe][1] = q[qs][1];         qe++;       }       if (map[q[qs][0] - 1][q[qs][1]] == 1) {         map[q[qs][0] - 1][q[qs][1]] = 0;         q[qe][0] = q[qs][0] - 1;         q[qe][1] = q[qs][1];         qe++;       }       if (map[q[qs][0]][q[qs][1] + 1] == 1) {         map[q[qs][0]][q[qs][1] + 1] = 0;         q[qe][0] = q[qs][0];         q[qe][1] = q[qs][1] + 1;         qe++;       }       if (map[q[qs][0]][q[qs][1] - 1] == 1) {         map[q[qs][0]][q[qs][1] - 1] = 0;         q[qe][0] = q[qs][0];         q[qe][1] = q[qs][1] - 1;         qe++;       }     }     for (i = 0; i < n; i++) {       for (j = 0; j < m; j++) {         if (map[i][j] == 1) {           printf( -1 );           return 0;         }       }     }     for (i = 2; i <= ans; i++) {       if (ans % i == 0) printf( %d  , i);     }     return 0;   }   