import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	}

}
class Solve{
	 Scanner sc = new Scanner(System.in) ;
	 void solve() {
		 int N=sc.nextInt();
		 int D=sc.nextInt();
		 int[][] X = new int[N][D];
		 int res=0;
		 
		 for(int i=0;i<N;i++) {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 }
		 for(int i=0;i<N-1;i++) {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 }
		 



		 System.out.println(res);
	 }
} import java.util.Scanner; Scanner java.util public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	}

} Main public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	} main {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	} Solve s= new Solve(); s new Solve() s.solve() s.solve s String[] args args class Solve{
	 Scanner sc = new Scanner(System.in) ;
	 void solve() {
		 int N=sc.nextInt();
		 int D=sc.nextInt();
		 int[][] X = new int[N][D];
		 int res=0;
		 
		 for(int i=0;i<N;i++) {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 }
		 for(int i=0;i<N-1;i++) {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 }
		 



		 System.out.println(res);
	 }
} Solve Scanner sc = new Scanner(System.in) ; sc new Scanner(System.in) void solve() {
		 int N=sc.nextInt();
		 int D=sc.nextInt();
		 int[][] X = new int[N][D];
		 int res=0;
		 
		 for(int i=0;i<N;i++) {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 }
		 for(int i=0;i<N-1;i++) {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 }
		 



		 System.out.println(res);
	 } solve {
		 int N=sc.nextInt();
		 int D=sc.nextInt();
		 int[][] X = new int[N][D];
		 int res=0;
		 
		 for(int i=0;i<N;i++) {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 }
		 for(int i=0;i<N-1;i++) {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 }
		 



		 System.out.println(res);
	 } int N=sc.nextInt(); N sc.nextInt() sc.nextInt sc int D=sc.nextInt(); D sc.nextInt() sc.nextInt sc int[][] X = new int[N][D]; X new int[N][D] N D int res=0; res 0 for(int i=0;i<N;i++) {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 } int i=0; int i=0; i 0 i<N i N i++ i++ i {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 } {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 } for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 } int j=0; int j=0; j 0 j<D j D j++ j++ j {
				 X[i][j]=sc.nextInt();
				 } {
				 X[i][j]=sc.nextInt();
				 } X[i][j]=sc.nextInt() X[i][j] X[i] X i j sc.nextInt() sc.nextInt sc for(int i=0;i<N-1;i++) {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 } int i=0; int i=0; i 0 i<N-1 i N-1 N 1 i++ i++ i {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 } {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 } for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			} int j=N-1; int j=N-1; j N-1 N 1 j>i j i j-- j-- j {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			} {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			} double dis=0; dis 0 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 } int k=0; int k=0; k 0 k<D k D k++ k++ k {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 } {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 } dis += Math.pow((X[i][k]-X[j][k]), 2) dis Math.pow((X[i][k]-X[j][k]), 2) Math.pow Math (X[i][k]-X[j][k]) X[i][k] X[i] X i k X[j][k] X[j] X j k 2 int judge=(int)Math.sqrt(dis); judge (int)Math.sqrt(dis) Math.sqrt Math dis if(judge*judge==dis) {
					 res++;
				 } judge*judge==dis judge*judge judge judge dis {
					 res++;
				 } res++ res System.out.println(res) System.out.println System.out System System.out res public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	}

} public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	}

} Main
import java.util.Scanner;

public class Main {

	public static void main(String[] args) {
		// TODO 自動生成されたメソッド・スタブ
		Solve s= new Solve();
		s.solve();
	}

}
class Solve{
	 Scanner sc = new Scanner(System.in) ;
	 void solve() {
		 int N=sc.nextInt();
		 int D=sc.nextInt();
		 int[][] X = new int[N][D];
		 int res=0;
		 
		 for(int i=0;i<N;i++) {
			 for(int j=0;j<D;j++) {
				 X[i][j]=sc.nextInt();
				 }
		 }
		 for(int i=0;i<N-1;i++) {
			 
			 
			 for(int j=N-1;j>i;j--) {
				 double dis=0;
				 for(int k=0;k<D;k++) {
					 dis += Math.pow((X[i][k]-X[j][k]), 2);
				 }
				 int judge=(int)Math.sqrt(dis);
				 
				 
				 if(judge*judge==dis) {
					 res++;
				 }
			}
		 }
		 



		 System.out.println(res);
	 }
}