import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.util.ArrayDeque; import java.util.Arrays; import java.util.NoSuchElementException; class Edge{ int dst; long cost; public Edge(int dst,long cost) { this.dst=dst; this.cost=cost; } } public class Main { public static void main(String[] args) throws FileNotFoundException { long t = System.currentTimeMillis(); new Main().run(); System.err.println(System.currentTimeMillis() - t); } void run() { FastScanner sc = new FastScanner(); int N=sc.nextInt(); int M=sc.nextInt(); long[][] m=new long[M+2][M+2]; for(int i=1;i<=M;++i) for(int j=1;j<=M;++j) m[i][j]=sc.nextInt(); for(int i=0;i<=M+1;++i) for(int j=0;j<=M+1;++j) m[i][j]+=(j>0?m[i][j-1]:0); for(int i=0;i<=M+1;++i) for(int j=0;j<=M+1;++j) m[i][j]+=(i>0?m[i-1][j]:0); int[][] dp=new int[M+2][M+2]; for(int i=1;i<=M;++i) { for(int j=1;j<=M;++j) { for(int k=i;k<=M;++k) { for(int l=j;l<=M;++l) { if(m[k][l]-m[i-1][l]-m[k][j-1]+m[i-1][j-1]!=0)continue; dp[i][j]++; dp[i][l+1]--; dp[k+1][j]--; dp[k+1][l+1]++; } } } } for(int i=0;i<=M+1;++i) for(int j=0;j<=M+1;++j) dp[i][j]+=(j>0?dp[i][j-1]:0); for(int i=0;i<=M+1;++i) for(int j=0;j<=M+1;++j) dp[i][j]+=(i>0?dp[i-1][j]:0); for(int i=0;i