Issue 3301:  Bisect functions behaved badly when lo was negative.
diff --git a/Lib/bisect.py b/Lib/bisect.py
index e4a2133..fe84255 100644
--- a/Lib/bisect.py
+++ b/Lib/bisect.py
@@ -9,6 +9,8 @@
     slice of a to be searched.
     """
 
+    if lo < 0:
+        raise ValueError('lo must be non-negative')
     if hi is None:
         hi = len(a)
     while lo < hi:
@@ -30,6 +32,8 @@
     slice of a to be searched.
     """
 
+    if lo < 0:
+        raise ValueError('lo must be non-negative')
     if hi is None:
         hi = len(a)
     while lo < hi:
@@ -49,6 +53,8 @@
     slice of a to be searched.
     """
 
+    if lo < 0:
+        raise ValueError('lo must be non-negative')
     if hi is None:
         hi = len(a)
     while lo < hi:
@@ -69,6 +75,8 @@
     slice of a to be searched.
     """
 
+    if lo < 0:
+        raise ValueError('lo must be non-negative')
     if hi is None:
         hi = len(a)
     while lo < hi: