diff --git a/lib/int_sqrt.c b/lib/int_sqrt.c
index 14436f4ca6bd7f340971a4f85ded981a9c0b25dc..30e0f9770f88cef66f8655c0b377366b7d986db8 100644
--- a/lib/int_sqrt.c
+++ b/lib/int_sqrt.c
@@ -52,7 +52,7 @@ u32 int_sqrt64(u64 x)
 	if (x <= ULONG_MAX)
 		return int_sqrt((unsigned long) x);
 
-	m = 1ULL << (fls64(x) & ~1ULL);
+	m = 1ULL << ((fls64(x) - 1) & ~1ULL);
 	while (m != 0) {
 		b = y + m;
 		y >>= 1;