public int countPairs(int N, int M) {
		Set<Pair> vis = new HashSet<Pair>();
		int min = Math.min(N, M);
		for (int i = 1; i <= min; i++) {
			vis.add(new Pair(i, i));
		}
		int i;
		for (i = 0; i*i<N*M; i++) {
//			System.out.println("i -> "+i*i);
			int n = i;
//			System.out.println("jestem przy i->"+i);
			List<Integer> fac = new ArrayList<Integer>();
			
			for (int p = 2; n > 1; ++p)
                for (; n % p == 0; n /= p){
                        fac.add(p);                        
                }
			for (int j = 1; j < 1<<fac.size(); j++) {
				int a =1, b=1;
				for (int j2 = 0; j2 < fac.size(); j2++) {
					if ((j>>j2 & 1) == 1) {
						a *= fac.get(j2);
					} else{
						b *= fac.get(j2);
					}
				}
				if(a<=N && b<=M){
					vis.add(new Pair(a, b));
				}
			}
		}

		return vis.size();
	}