import java.io.IOException; import java.io.InputStream; import java.io.PrintWriter; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.NoSuchElementException; public class Main { public static void main(String[] args) { for(int i=0;i<1;i++) { slover(); out.flush(); } } static FastScanner sc = new FastScanner(); static PrintWriter out = new PrintWriter(System.out); //StringBuffer S = new StringBuffer(sc.next()); //String hoge2 = str.reverse().toString(); //map.containsKey(A) //Map map = new HashMap(N); /*for ( キーのデータ型 key : マップの名前.keySet() ) { データのデータ型 data = マップの名前.get( key ); // keyやdataを使った処理; }*/ //int i = Integer.parseInt(s); //Queue qq=new ArrayDeque<>(); //add,poll,peek BFSは前から実行される //Deque dd=new ArrayDeque<>();//push後ろに入れる,poll(pop)後ろからとる,peek addは先頭に入るからバグ注意 //stackdfsは後ろから実行される //ArrayList cc = new ArrayList<>(N); //cc.contains(tmp) //Arrays.asList(c).contains("a") //list.set(1,"walk");//1 1 2 3 5 //PriorityQueue r=new PriorityQueue();//add poll private static int INF =1000000007; private static class D{ int sum,count; D(int sum,int count){ this.sum=sum;; this.count=count; } } //Set a=new HashSet(); private static int mod=1000000007; private static ArrayList divisors2(long t) { ArrayList c=new ArrayList<>(); for(int i=1;i*i<=t;i++) { if(t%i==0) { if(i*i!=t) { c.add(t/i); } c.add((long)i); } } Collections.sort(c); Collections.reverse(c); return c; } //Integer.toBinaryString(i); //Integer.toString(i, 2); // //Integer.parseInt(bin, 2); //bitset private static int slover() { // f(x)=x^2-3; long N=sc.nextLong(); long K=sc.nextLong(); long ans=0; for(long i=1;i*i<=K;i++) { if(i==1)continue; if(K%i==0) { //p(i+" "+K/i); long t1=i; long t2=K/i; long v1=0; long v2=0; if(t1-N>N||t2-N>N)continue; if(t1-1>N) { v1+=Math.abs((t1-N)-N)+1; }else { v1+=t1-1; } if(t2-1>N) { v2+=Math.abs((t2-N)-N)+1; }else { v2+=t2-1; } ans+=v1*v2; if(i!=N/i)ans+=v1*v2; } } p(ans); return 0; } private static int modPow2(String S,int mod) { //iのt乗をO(log t)で返す int a=2; int res=1; int N=S.length()-1; for(int i=0;i>1; } return res; } public static int pid(int i) { int t=0; int j=0; while((i>>j)!=0) { if((1&(i>>j))==1) { t++; } j++; } return i%t; } public static long gcd(long num1,long num2) { if(num2==0) return num1; else return gcd(num2,num1%num2); } public static long lcm(long num1,long num2) { return num1*num2/gcd(num1,num2); } //O(N^0.5) private static boolean isPrime(long t) { if(t<2)return false; for(int i=2;i*i<=t;i++) { if(t%i==0)return false; } return true; } private static ArrayList divisors(long t) { ArrayList c=new ArrayList<>(); for(int i=1;i*i<=t;i++) { if(t%i==0) { if(i*i!=t) { c.add(t/i); } c.add((long)i); } } return c; } private static void bubunwa() { int N=sc.nextInt(); int K=sc.nextInt(); int a[]=sc.nextIntArray(N, false); boolean dp[] =new boolean[K+1]; Arrays.fill(dp, false); dp[0]=true; for(int i=0;i=0;x--) { if(dp[x])dp[x+a[i]]=true; } } p(dp[K] ? "Yes":"No"); } private static String bitToString(int i) { String T=""; for(int j=0;j<2;j++) { //if(i>>j==0)break; if((1&i>>j)==1) { T+="1"; }else T+="0"; } return (i+" "+T); } /*********************************************************************/ //target以下までの値のindexを返す //target以上が欲しいときは返り値+1すればいい //0-indexで個数を求めるときはさらにindex+1する必要あり private static int lower_bound(long a[],long target) { //p(target+ " "+Arrays.toString(a)); if(a[0]>target)return -1; //最後の値がtarget以下であるときは最後のindexを返す。 //target以上が欲しいときは注意する必要あり if(a[a.length-1]<=target) return a.length-1; int S=-1; int E=a.length; while(Starget) { return G; }else if(a[G]<=target){ S=G; }else if(a[G]>target) { E=G; } } return -1; } static String nextPermutation(String s) { ArrayList list=new ArrayList<>(); for(int i=0;i=0;i--) { if(list.get(i)=L;i--) { if(pivot